2008-11-11 103 views

回答

47

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

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

注意的是,虽然通过.getClass() VS .getType()一个obj(的运行时类型对象(爪哇java.lang.Class≣C#System.Type)上Java和C#工作),Java的isInstance将一个对象作为参数,而C#的IsAssignableFrom需要另一个System.Type对象。

+1

注意IsAssignableFrom需要一个Type而不是一个对象,因此您需要实际执行OtherObj.getType()。 – FlySwat 2008-11-11 23:25:22

+3

感谢乔恩 - 请记住,这是一个维基!我不讨厌人们纠正我的错误。 – 2008-11-11 23:34:23

2

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

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

不知道这将有更好的表现。我把它留给别人基准:)

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

取决于使用is如果你不想用铸的结果,并使用as如果你这样做。你很少想写:

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

相反的:

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

下面的代码可以替代IsAssignableFrom

parentObject.GetType().IsInstanceOfType(inheritedObject) 

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

相关问题