2008-11-11 7 views

Répondre

47

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

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

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

+1

note IsAssignableFrom prend un type, pas un objet, donc vous devez réellement faire OtherObj.getType(). – FlySwat

+3

Merci Jon - et rappelez-vous, ceci est un wiki! Je ne veux pas que les gens corrigent mes erreurs. –

+1

intéressant ... en java, la JVM traite spécialement "instanceof", apparemment très très rapidement, ce qui peut expliquer pourquoi c'est exceptionnellement un mot-clé (il existe aussi une méthode isAssignable en java). –

2

juste à côté du haut de ma tête, vous pouvez aussi le faire:

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

Je ne sais pas qui mieux performer. Je vais laisser à quelqu'un d'autre référence :)

172
bool result = (obj is MyClass); // Better than using 'as' 
+0

Cela fonctionne-t-il même pour les classes qui utilisent l'héritage? ('new Child() est Parent') –

+2

oui oui, exactement comment vous montrez ci-dessus –

+0

testé ici, cela fonctionne pour les classes que l'héritage des utilisateurs. Merci mec. –

36

depends, utilisez is si vous ne voulez pas utiliser le résultat de la distribution et l'utilisation as si vous le faites. Vous presque jamais envie d'écrire:

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

Au lieu de:

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

Ci-dessous le code peut être une alternative à IsAssignableFrom.

parentObject.GetType().IsInstanceOfType(inheritedObject) 

Voir la description de Type.IsInstanceOfType dans MSDN.

Questions connexes