我将首先用代码解释我的场景:
public class A { }
public class B : A { }
public class C : B { }
public class D { }
public class Test
{
private A a = new A ( ) ;
private B b = new B ( ) ;
private C c = new C ( ) ;
private D d = new D ( ) ;
public Test ( )
{
// Evaluates to "false"
if ( a.GetType == typeof(B) ) { } //TODO: Add Logic
// Evaluates to "true"
if ( b.GetType == typeof(B) ) { } //TODO: Add Logic
// I WANT this to evaluate to "true"
if ( c.GetType == typeof(B) ) { } //TODO: Add Logic
// Evaluates to "false"
if ( d.GetType == typeof(B) ) { } //TODO: Add Logic
}
}
这里需要注意的重要一行是:
if ( c.GetType == typeof(B) ) { }
我相信这实际上会评估为“false”,因为 typeof(B) 和 typeof(C) 在两个方向上都不相等。 (C 是 B,但 B 不一定是 C。)
但我需要的是某种能够考虑到这一点的条件。我如何判断一个对象是 B 还是由它派生的任何对象?
我不在乎它是否是从 B 派生的对象,只要基 B 类存在即可。我无法预测什么派生类可能会出现在我的应用程序中。我只需要假设将来可能存在未知的派生类 - 因此我只能专注于确保基类是我所期望的。
我需要一个条件来为我执行此检查。如何才能做到这一点?
你可以只使用is
:
if (c is B) // Will be true
if (d is B) // Will be false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)