Testare un oggetto per NON essere un tipo
Domanda
So come testare un oggetto per vedere se è di un tipo, usando la parola chiave IS, ad es.
if (foo is bar)
{
//do something here
}
ma come si verifica che non sia "bar"? Non riesco a trovare una parola chiave che funzioni con IS per verificare un risultato negativo.
A proposito, ho la terribile sensazione che sia così ovvio, quindi mi scuso in anticipo...
Soluzione
if (!(foo is bar)) {
}
Altri suggerimenti
Puoi anche usare il come operatore.
L'operatore AS viene utilizzato per eseguire conversioni tra tipi compatibili.
bar aBar = foo as bar; // aBar is null if foo is not bar
Non esiste una parola chiave specifica
if (!(foo is bar)) ...
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy
Dovresti chiarire se vuoi testare che un oggetto lo sia esattamente un certo tipo o assegnabile da un certo tipo.Per esempio:
public class Foo : Bar {}
E supponiamo di avere:
Foo foo = new Foo();
Se vuoi sapere se foo non è Bar(), allora dovresti fare questo:
if(!(foo.GetType() == tyepof(Bar))) {...}
Ma se vuoi assicurarti che foo non derivi da Bar, allora un controllo semplice è usare la parola chiave as.
Bar bar = foo as Bar;
if(bar == null) {/* foo is not a bar */}