web-dev-qa-db-fra.com

Quel est l'équivalent C # de isInstance () de Java?

Je connais is et as pour instanceof, mais qu'en est-il de la méthode réfléchissante isInstance () ?

85
diegogs

L'équivalent de obj.getClass().isInstance(otherObj) de Java en C # est le suivant:

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

Notez que tandis que les deux Java et C # fonctionnent sur l'objet de type d'exécution (Java Java.lang.Class ≣ C # System.Type) D'un obj (via .getClass() vs .getType()), isInstance de Java prend un objet comme argument, tandis que IsAssignableFrom de C # attend un autre objet System.Type.

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

Cela dépend, utilisez is si vous ne voulez pas utiliser le résultat du cast et utilisez as si vous le souhaitez. Vous ne voulez presque jamais écrire:

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

Au lieu de:

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

juste en haut de ma tête, vous pourriez aussi faire:

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

Je ne sais pas lequel fonctionnerait mieux. Je laisse à quelqu'un d'autre le soin de comparer :)

2
CodingWithSpike

Le code ci-dessous peut être une alternative à IsAssignableFrom.

parentObject.GetType().IsInstanceOfType(inheritedObject)

Voir Type.IsInstanceOfType description dans MSDN.

2
Youngjae