Testen Sie ein Objekt darauf, ob es KEIN Typ ist
Frage
Ich weiß, wie man ein Objekt testet, um zu sehen, ob es von einem Typ ist, indem ich das Schlüsselwort IS verwende, z. B.
if (foo is bar)
{
//do something here
}
Aber wie testet man, ob es nicht „bar“ ist? Ich kann anscheinend kein Schlüsselwort finden, das mit IS funktioniert, um auf ein negatives Ergebnis zu testen.
Übrigens – ich habe das schreckliche Gefühl, dass das soooo offensichtlich ist, also entschuldige mich im Voraus ...
Lösung
if (!(foo is bar)) {
}
Andere Tipps
Sie können auch die als Operator .
Der als Operator wird benutzt, um Konvertierungen zwischen kompatibelen Typen.
bar aBar = foo as bar; // aBar is null if foo is not bar
Es gibt kein spezifisches Schlüsselwort
if (!(foo is bar)) ...
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy
Sie sollten klären, ob Sie testen möchten, dass ein Objekt genau eine bestimmte Art oder zuweisbare von einem bestimmten Typ. Zum Beispiel:
public class Foo : Bar {}
Und wenn Sie haben:
Foo foo = new Foo();
Wenn Sie wissen wollen, ob foo ist nicht bar (), dann würden Sie dies tun:
if(!(foo.GetType() == tyepof(Bar))) {...}
Aber wenn Sie sicherstellen möchten, dass foo nicht von Bar nicht ableiten, dann eine einfache Prüfung ist das als Schlüsselwort zu verwenden.
Bar bar = foo as Bar;
if(bar == null) {/* foo is not a bar */}