web-dev-qa-db-ja.com

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

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

85
diegogs

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

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

両方のJavaとC#がobjのランタイム型オブジェクト(Java Java.lang.Class≣C#System.Type)で動作することに注意してください(.getClass().getType())、JavaのisInstanceは引数としてオブジェクトを取りますが、C#のIsAssignableFromは別のSystem.Typeオブジェクトを必要とします。

51
Konrad Rudolph
bool result = (obj is MyClass); // Better than using 'as'
180
Ana Betts

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

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

の代わりに:

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

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

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

どちらが優れているかわからない。ベンチマークのために他の人に任せる:)

2
CodingWithSpike

以下のコードは、IsAssignableFromの代わりになります。

parentObject.GetType().IsInstanceOfType(inheritedObject)

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

2
Youngjae