When is obj.GetType().IsInstanceOfType(typeof(MyClass)) true



我正在查看这段由其他人编写的代码,我想知道它什么时候会求值为true。基本上,它是说someType是someOtherType的一个实例。这有道理吗?到目前为止,我已经尝试过:

derivedClass.GetType().IsInstanceOfType(typeof(BaseClass)) 
baseClass.GetType().IsInstanceOfType(typeof(DerivedClass)) 
myClass.GetType().IsInstanceOfType(typeof(MyClass)) 

所有的评估结果都是假的。

感谢您的帮助。

IsInstanceOfType()检查您传递的实例是否是您调用它的类型的实例。

您正在将一个System.Type实例传递给IsInstanceOfType()。只有在typeof(Type)或它的一个基类上调用它时,这才是真的。

如果涉及的对象(分别为derivedClassbaseClassmyClass)是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文档说,如果当前Typeo表示的对象的继承层次结构中,或者如果当前
Type是
o支持的接口,则Type.IsInstanceOfType(o)返回"
true。"

在上面的例子中,TypeGetType()返回的类型,所以它是最左边对象的类型。对象o是类型为Typetypeof(BaseClass)。当前的TypeDerivedClass,而对象otypeof(BaseClass)o的类型为Type

将其插入文档中。如果DerivedClassType的继承层次结构中,则返回"true。"

这很少是真的。

作者几乎可以肯定地想要typeof(BaseClass).IsInstanceOfType(derivedClass),它更容易写成derivedClass is BaseClass

当您调用GetType()的对象是System的实例时,这是真的。作为参数传递给IsInstanceOfType()方法的参数的Type对象。

IsInstanceOfType确定指定的对象是否为当前Type的实例。

示例:IsInstanceOfType(o)

如果当前类型在由o表示的对象的继承层次结构中,或者如果当前类型是由o支持的接口,则为true。如果这些条件都不满足,或者如果o为null,或者当前类型是开放的泛型类型

相关内容

最新更新