is
のas
とinstanceof
は知っていますが、リフレクティブ isInstance() メソッドはどうですか?
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
オブジェクトを必要とします。
bool result = (obj is MyClass); // Better than using 'as'
依存します。キャストの結果を使用しない場合はis
を使用し、使用する場合はas
を使用します。あなたはほとんど書きたくない:
if(foo is Bar) {
return (Bar)foo;
}
の代わりに:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
私の頭のすぐ上で、あなたもすることができます:
bool result = ((obj as MyClass) != null)
どちらが優れているかわからない。ベンチマークのために他の人に任せる:)
以下のコードは、IsAssignableFrom
の代わりになります。
parentObject.GetType().IsInstanceOfType(inheritedObject)
MSDNの Type.IsInstanceOfType の説明を参照してください。