90

私はとについて知っていisますが、リフレクティブisInstance()メソッドはどうですか?asinstanceof

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.lang.ClassJava≣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

以下のコードは に代わるものIsAssignableFromです。

parentObject.GetType().IsInstanceOfType(inheritedObject)

MSDN のType.IsInstanceOfType の説明を参照してください。

于 2015-12-28T12:52:57.437 に答える
2

頭のてっぺんから、次のこともできます。

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

どちらがより良いパフォーマンスを発揮するかはわかりません。ベンチマークは他の人に任せます:)

于 2008-11-12T01:10:18.457 に答える