我想检查一个对象的类型.如果类型完全相同,我只想返回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)
Run Code Online (Sandbox Code Playgroud)
Cha*_*ion 44
b.GetType() == typeof(A)
Run Code Online (Sandbox Code Playgroud)
Joh*_*n K 11
(b is A) 检查b是否与A类型兼容,这意味着它检查b的继承层次结构和类型A的已实现接口.
b.GetType() == typeof(A)另一方面检查完全相同的类型.如果您没有进一步限定类型(即铸造),那么您将检查声明的b类型.
在任何一种情况下(使用上述任何一种情况),true如果b是A的确切类型,你将得到.
要小心知道为什么要在一种情况下使用精确类型而不是另一种情况:
编辑:
在你的例子中,
if(b is A) // this should return false
Run Code Online (Sandbox Code Playgroud)
使用以下方法将其转换为精确声明的类型检查
if (b.GetType() == typeof(A))
Run Code Online (Sandbox Code Playgroud)