我想检查一个对象的类型。如果类型完全相同,我只想返回true。继承的类应该返回false。
例如:
class A {}
class B : A {}
B b = new B();
// The next line will return true,
// but I am looking for an expression that returns false here
if(b is A)
答案 0 :(得分:42)
b.GetType() == typeof(A)
答案 1 :(得分:11)
(b is A)
检查b与A的类型兼容性,这意味着它检查b的继承层次结构和类型A的已实现接口。
b.GetType() == typeof(A)
会检查完全相同的类型。如果你没有进一步限定类型(即转换),那么你正在检查声明的b类型。
在任何一种情况下(使用上述任何一种情况),如果b是A的确切类型,您将获得true
。
小心地知道为什么要在一种情况下使用确切类型而不是另一种情况:
修改强>
在您的示例中,
if(b is A) // this should return false
使用以下方法将其转换为精确声明的类型检查:
if (b.GetType() == typeof(A))
答案 2 :(得分:8)
使用:
if (b.GetType() == typeof(A)) // this returns false
答案 3 :(得分:4)
您的代码示例似乎与您的问题相反。
bool isExactTypeOrInherited = b is A;
bool isExactType = b.GetType() == a.GetType();
答案 4 :(得分:3)
bool IsSameType(object o, Type t) {
return o.GetType() == t;
}
然后你可以调用这样的方法:
IsSameType(b, typeof(A));