如何检查是否变量的类型相匹配的类型存储在一个变量如何检查是否变量的类型相匹配的类型存储在一个变量(H

2019-05-13 18:55发布

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

u is User -> returns true

u is t -> compilation error

如何测试,如果一些变量是某种类型的这样吗?

Answer 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 b3 = x.GetType() == typeof(Tiger); // true
bool b4 = x.GetType() == typeof(Animal); // false! even though x is an animal

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

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


Answer 2:

GetType()存在于每一个框架的类型,因为它是在基定义object类型。 因此,无论该类型本身,你可以用它来返回底层Type

所以,你需要做的是:

u.GetType() == t


Answer 3:

你需要看看你的实例的类型等于类的类型。 为了让您使用实例的类型GetType()方法:

 u.GetType().Equals(t);

要么

 u.GetType.Equals(typeof(User));

应该这样做。 显然,你可以使用“==”,如果你喜欢做你的比较。



Answer 4:

为了检查是否有物体,而不是写入与给定类型的变量兼容,

u is t

你应该写

typeof(t).IsInstanceOfType(u)


文章来源: How to check if variable's type matches Type stored in a variable