什么是C#等效于Java的isInstance()?

时间:2008-11-11 23:09:51

标签: c# reflection introspection instanceof

我知道is asinstanceof {{1}},但反射isInstance()方法呢?

5 个答案:

答案 0 :(得分:180)

bool result = (obj is MyClass); // Better than using 'as'

答案 1 :(得分:51)

C#中Java的obj.getClass().isInstance(otherObj)等价如下:

bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());

请注意,虽然Java和C#都在java.lang.Class的运行时类型对象(Java System.Type≣C#obj)上工作(通过.getClass() vs {{1} }),Java的.getType()将一个对象作为其参数,而C#的isInstance期望另一个IsAssignableFrom对象。

答案 2 :(得分:39)

取决于,如果您不想使用演员表的结果,请使用is,如果您愿意,请使用as。你几乎不想写:

if(foo is Bar) {
    return (Bar)foo;
}

而不是:

var bar = foo as Bar;
if(bar != null) {
    return bar;
}

答案 3 :(得分:2)

就在我的头顶,你也可以这样做:

bool result = ((obj as MyClass) != null)

不确定哪个会表现得更好。我会把它留给其他人做基准测试:)

答案 4 :(得分:2)

以下代码可以替代IsAssignableFrom

parentObject.GetType().IsInstanceOfType(inheritedObject)

请参阅MSDN中的Type.IsInstanceOfType说明。