什么时候是obj.GetType().IsInstanceOfType(typeof(MyClass))是真的吗?

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)

并且所有人都评价为假.

任何帮助表示赞赏.

SLa*_*aks 6

IsInstanceOfType()检查是否实例,你传递给它的是你把它称为对类型的实例.

你正在传递一个System.Type实例IsInstanceOfType().只有在它typeof(Type)或其中一个基类上调用它时才会出现这种情况.


Jus*_*tin 5

每个那些3线将返回true 如果对象参与(derivedClass,baseClassmyClass分别)是一个实例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)