c#检查确切类型

时间:2010-01-29 16:14:44

标签: c# types

我想检查一个对象的类型。如果类型完全相同,我只想返回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) 

5 个答案:

答案 0 :(得分:42)

b.GetType() == typeof(A)

答案 1 :(得分:11)

(b is A)检查b与A的类型兼容性,这意味着它检查b的继承层次结构和类型A的已实现接口。

另一方面,

b.GetType() == typeof(A)会检查完全相同的类型。如果你没有进一步限定类型(即转换),那么你正在检查声明的b类型。

在任何一种情况下(使用上述任何一种情况),如果b是A的确切类型,您将获得true

小心地知道为什么要在一种情况下使用确切类型而不是另一种情况:

  • 例如,检查确切的类型会破坏你可能不希望最终做的OO多态性的目的。
  • 但是,例如,如果您正在实施一个专门的软件设计模式,如Inversion of Control IoC容器,那么您有时会想要使用确切的类型。

修改

在您的示例中,

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));