我正在查看这段由其他人编写的代码,我想知道它什么时候会求值为true。基本上,它是说someType是someOtherType的一个实例。这有道理吗?到目前为止,我已经尝试过:
derivedClass.GetType().IsInstanceOfType(typeof(BaseClass))
baseClass.GetType().IsInstanceOfType(typeof(DerivedClass))
myClass.GetType().IsInstanceOfType(typeof(MyClass))
所有的评估结果都是假的。
感谢您的帮助。
IsInstanceOfType()
检查您传递的实例是否是您调用它的类型的实例。
您正在将一个System.Type
实例传递给IsInstanceOfType()
。只有在typeof(Type)
或它的一个基类上调用它时,这才是真的。
如果涉及的对象(分别为derivedClass
、baseClass
和myClass
)是object
或未记录的RuntimeType
对象的实例(请注意,Type是抽象的),那么这3行中的每一行都将返回true,因此例如,以下将导致true语句:
var myObject = new object();
myObject.GetType().IsInstanceOfType(typeof(Console));
myObject = typeof(Object);
myObject.GetType().IsInstanceOfType(typeof(Console));
请注意,使用的类型(在本例中为Console
)并不重要,对语句的结果也没有影响。
为什么
IsInstanceOfType的文档告诉我们,如果传入的对象是当前类型的实例,则它将返回true,因此例如,如果myForm
是从Form
派生的类,则下面的语句将返回true;否则,它将返回false。
typeof(Form).IsInstanceOfType(myForm);
在您的案例中,myForm
实际上是typeof(BaseClass)
,它属于未记录的类型RuntimeType
(从Type
派生而来),因此只有当该未记录类型恰好从所提供的类型派生时,才会返回true
——这不太可能是所需的行为。
我应该使用什么
您可能想要的是is keword,如果提供的对象是给定类型的实例,则返回true
derivedClass is BaseClass
baseClass is DerivedClass
myClass is MyClass
Type.IsInstanceOf
文档说,如果当前Type在o表示的对象的继承层次结构中,或者如果当前
Type是
o支持的接口,则Type.IsInstanceOfType(o)
返回"
true。"
在上面的例子中,Type
是GetType()
返回的类型,所以它是最左边对象的类型。对象o
是类型为Type
的typeof(BaseClass)
。当前的Type
是DerivedClass
,而对象o
是typeof(BaseClass)
。o
的类型为Type
。
将其插入文档中。如果DerivedClass
在Type
的继承层次结构中,则返回"true。"
这很少是真的。
作者几乎可以肯定地想要typeof(BaseClass).IsInstanceOfType(derivedClass)
,它更容易写成derivedClass is BaseClass
。
当您调用GetType()的对象是System的实例时,这是真的。作为参数传递给IsInstanceOfType()方法的参数的Type对象。
IsInstanceOfType
确定指定的对象是否为当前Type的实例。
示例:IsInstanceOfType(o)
如果当前类型在由o表示的对象的继承层次结构中,或者如果当前类型是由o支持的接口,则为true。如果这些条件都不满足,或者如果o为null,或者当前类型是开放的泛型类型