5

我正在查看其他人编写的这段代码,我想知道它何时会评估为真。基本上,它说 someType 是 someOtherType 的一个实例。它甚至有意义吗?到目前为止,我已经尝试过:

derivedClass.GetType().IsInstanceOfType(typeof(BaseClass)) 

baseClass.GetType().IsInstanceOfType(typeof(DerivedClass)) 

myClass.GetType().IsInstanceOfType(typeof(MyClass)) 

并且所有这些都评估为假。

任何帮助表示赞赏。

4

5 回答 5

7

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

您正在将一个System.Type实例传递给IsInstanceOfType(). 仅当您调用它typeof(Type)或其基类之一时,这才是正确的。

于 2012-08-28T13:38:44.817 回答
6

当所涉及的对象(derivedClass分别为baseClassmyClass)是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是从 派生的类,则以下语句将返回 true Form,否则将返回 false。

typeof(Form).IsInstanceOfType(myForm);

myForm实际上,在您的情况下typeof(BaseClass),它属于未记录的类型RuntimeType(派生自Type),因此只有在true此未记录的类型恰好从提供的类型派生时才会返回 - 这不太可能是所需的行为。

我应该改用什么?

您可能追求的是is keword,如果提供的对象是给定类型的实例,则返回 true

derivedClass is BaseClass
baseClass is DerivedClass
myClass is MyClass
于 2012-08-28T13:51:51.427 回答
3

Type.IsInstanceOf文档说,如果当前Type在o表示的对象的继承层次结构中,或者当前Typeo支持的接口,则Type.IsInstanceOfType(o)返回“ true ” 。

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

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

这很少是真的。

作者几乎可以肯定是有意typeof(BaseClass).IsInstanceOfType(derivedClass)的,这更容易写成derivedClass is BaseClass.

于 2012-08-28T13:44:42.973 回答
0

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

于 2012-08-28T13:38:02.773 回答
0

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

示例:IsInstanceOfType(o)

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

于 2012-08-28T13:38:24.413 回答