use*_*691 3 c# types isinstance
我正在看别人写的这段代码,我想知道它什么时候会评估为真.基本上,它说someType是someOtherType的一个实例.它甚至有意义吗?到目前为止,我已经尝试过:
derivedClass.GetType().IsInstanceOfType(typeof(BaseClass))
baseClass.GetType().IsInstanceOfType(typeof(DerivedClass))
myClass.GetType().IsInstanceOfType(typeof(MyClass))
Run Code Online (Sandbox Code Playgroud)
并且所有人都评价为假.
任何帮助表示赞赏.
IsInstanceOfType()检查是否实例,你传递给它的是你把它称为对类型的实例.
你正在传递一个System.Type实例IsInstanceOfType().只有在它typeof(Type)或其中一个基类上调用它时才会出现这种情况.
每个那些3线将返回true 仅如果对象参与(derivedClass,baseClass和myClass分别)是一个实例object,或者未记录的RuntimeType对象(注意,类型是抽象的),因此,例如以下将导致真正的语句:
var myObject = new object();
myObject.GetType().IsInstanceOfType(typeof(Console));
myObject = typeof(Object);
myObject.GetType().IsInstanceOfType(typeof(Console));
Run Code Online (Sandbox Code Playgroud)
请注意,使用的类型(在本例中Console)并不重要,并且对语句的结果没有影响.
为什么?
IsInstanceOfType的文档告诉我们,如果传入的对象是当前类型的实例,它将返回true,因此,例如,如果myForm是派生自的类,则以下语句将返回true Form,否则将返回false.
typeof(Form).IsInstanceOfType(myForm);
Run Code Online (Sandbox Code Playgroud)
myForm事实上typeof(BaseClass),在你的情况下,它是未记录的类型RuntimeType(源自Type),因此true如果这个未记录的类型恰好从提供的类型派生,你只会被返回 - 这不太可能是期望的行为.
我应该用什么呢?
你可能追求的是is keword,如果提供的对象是给定类型的实例,则返回true
derivedClass is BaseClass
baseClass is DerivedClass
myClass is MyClass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4797 次 |
| 最近记录: |