2008-09-11 7 views
0

Je sais comment tester un objet pour voir s'il est d'un type, en utilisant le mot-clé IS, par exemple.Test d'un objet pour ne pas être un type

if (foo is bar) 
{ 
    //do something here 
} 

mais comment voulez-vous tester pour elle ne pas être « bar » ?, je ne peux pas sembler trouver un mot-clé qui fonctionne avec IS pour tester un résultat négatif.

BTW - J'ai un sentiment horrible cela est tellement évident, donc des excuses à l'avance ...

+1

C'est une bonne question. Ce n'est pas évident si vous avez essayé mais ne pouvez pas le comprendre. Cela dit, vous pouvez regarder quelques tutoriels de syntaxe C# où ils épeler tout ce truc, et des choses que vous ne vous êtes même pas encore demandé. –

Répondre

13
if (!(foo is bar)) { 
} 
1

Il n'y a pas de mot clé spécifique

if (!(foo is bar)) ... 
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy 
4

Vous pouvez également utiliser la as operator.

L'opérateur as est utilisé pour effectuer des conversions entre types compatibles.

bar aBar = foo as bar; // aBar is null if foo is not bar 
+0

Est-ce «cryptique et bizarre» ou en profitant des fonctionnalités du langage? –

1

Vous devez préciser si vous voulez tester qu'un objet est exactement un certain type ou assignable à partir d'un certain type. Par exemple:

public class Foo : Bar {} 

Et supposons que vous avez:

Foo foo = new Foo(); 

Si vous voulez savoir si foo bar est pas(), vous devez faire cela:

if(!(foo.GetType() == tyepof(Bar))) {...} 

Mais si vous voulez vous assurer que foo ne dérive pas de Bar, alors une vérification facile est d'utiliser le mot-clé as.

Bar bar = foo as Bar; 
if(bar == null) {/* foo is not a bar */} 
+0

J'adore le foo comme un peu de barre, parce que vous voudrez sans doute faire quelque chose avec foo si c'est une barre, donc vous pourriez aussi bien coder pour cette situation. –

Questions connexes