User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
如何通过这种方式测试某个变量是否属于某种类型?
最佳答案
其他答案均有重大遗漏。
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 animal
如果这不是您想要的,那么您可能需要 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
关于c# - 如何检查变量的类型是否与存储在变量中的类型匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10415276/