2008-11-11 109 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中的說明。

相關問題