90

我知道isand asfor instanceof,但是反射isInstance()方法呢?

4

5 回答 5

185
bool result = (obj is MyClass); // Better than using 'as'
于 2008-11-12T05:12:24.740 回答
53

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

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

请注意,虽然 Java 和 C# 都在(via vs ) 的运行时类型对象 (Java java.lang.Class≣ C# System.Type) 上工作,但 Java将对象作为其参数,而 C#需要另一个对象。obj.getClass().getType()isInstanceIsAssignableFromSystem.Type

于 2008-11-11T23:13:08.473 回答
39

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

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

代替:

var bar = foo as Bar;
if(bar != null) {
    return bar;
}
于 2008-11-12T05:30:53.157 回答
2

就在我的脑海中,你也可以这样做:

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

不确定哪个会更好。我将把它留给其他人进行基准测试:)

于 2008-11-12T01:10:18.457 回答
2

下面的代码可以替代IsAssignableFrom.

parentObject.GetType().IsInstanceOfType(inheritedObject)

请参阅MSDN 中的Type.IsInstanceOfType描述。

于 2015-12-28T12:52:57.437 回答