我将从代码中解释我的场景开始:
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) ) { }
我认为这实际上会评估为"假",因为(B)类型和(C)类型在两个方向上彼此不相等.(C是B,但B不一定是C.)
但我需要的是某种将这一点考虑在内的条件.如何判断对象是B还是从中派生的任何东西?
我不在乎它是否是来自B的DERIVED对象,只要基类B类存在.而且我无法预测派生类可能会在我的应用程序中显示出来.我只需要假设将来可能存在未知的派生类 - 因此我只能专注于确保基类是我所期望的.
我需要一个能够为我执行此检查的条件.如何实现这一目标?
你可以使用is
:
if (c is B) // Will be true if (d is B) // Will be false
编辑:这回答了主题标题中的问题.cdm9002对问题有更好的答案,如完整帖子中所述.
typeof(B).IsAssignableFrom(c.GetType())