JavaのisInstance()に相当するC#は何ですか?


回答:


52

obj.getClass().isInstance(otherObj)C#のJavaに相当するものは次のとおりです。

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

JavaとC#はどちらも(via vs )のランタイムタイプオブジェクト(java.lang.ClassJava≣C#System.Type)で動作しますが、Javaはオブジェクトを引数として受け取りますが、C#は別のオブジェクトを期待します。obj.getClass().getType()isInstanceIsAssignableFromSystem.Type


1
注IsAssignableFromはオブジェクトではなくタイプを受け取るため、実際にOtherObj.getType()を実行する必要があります。
FlySwat 2008

3
ジョンに感謝します–そして覚えておいてください、これはウィキです!私は自分の間違いを訂正する人々に憤慨しません。
Konrad Rudolph

1
興味深い... Javaでは、JVMは「instanceof」を特別に扱います。明らかに非常に高速です。これは、その異常なキーワードの理由を説明している可能性があります(JavaにはisAssignableメソッドもあります)。
Michael Neale

このメソッドが、読みやすい「is」演算子よりも優れているのはなぜですか?
ティモシーゴンザレス

@TimothyGonzalez何か違うことをするからです。2つの変数が同じタイプであるかどうかをテストしますis対照的に、タイプ名が必要でした。これはOPが望んでいたものです:Javaのと同等ですisInstance。ばかげた数の賛成にもかかわらず、他の答えは単に間違っています。
コンラッドルドルフ


39

is場合によっては、キャストの結果を使用したくない場合は使用し、使用する場合は使用しasます。あなたはほとんど書きたくない:

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

の代わりに:

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

2

私の頭のすぐ上で、あなたはまたすることができます:

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

どちらが優れているかわからない。ベンチマークは他の誰かに任せます:)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.