一尘不染

如何检查变量的类型是否与存储在变量中的类型匹配

c#

User u = new User();
Type t = typeof(User);

u is User -> returns true

u is t -> compilation error

如何以这种方式测试某个变量是否属于某种类型?


阅读 281

收藏
2020-05-19

共1个答案

一尘不染

其他答案都包含重大遗漏。

is操作者 检查操作的运行时类型是 完全相同 给定的类型; 而是检查运行时类型 是否与 给定类型 兼容

class Animal {}
class Tiger : Animal {}
...
object x = new Tiger();
bool b1 = x is Tiger; // true
bool b2 = x is Animal; // true also! Every tiger is an animal.

但是使用反射检查类型 身份 将检查 身份 ,而不是 兼容性

bool b5 = x.GetType() == typeof(Tiger); // true
bool b6 = x.GetType() == typeof(Animal); // false! even though x is an animal

or with the type variable
bool b7 = t == typeof(Tiger); // true
bool b8 = t == typeof(Animal); // false! even though x is an

如果这不是您想要的,那么您可能需要IsAssignableFrom:

bool b9 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b10 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.

or with the type variable
bool b11 = t.IsAssignableFrom(x.GetType()); // true
bool b12 = t.IsAssignableFrom(x.GetType()); // true! A
2020-05-19