2009-08-27 9 views
6
if(myVariable is SomeType) 

Dal nulla, ma dalla curiosità, qual è il contrario? Voglio fare qualcosa di simile:Qual è il contrario di "è"?

if(!myVariable is SomeType) 
if(myVariable is not SomeType) 

Né compilare.

Dato che "is" è una parola non ricercabile nella maggior parte dei motori, è stato difficile trovare una risposta.

Duplicate:

C# : ‘is’ keyword and checking for Not

+0

In genere è ancora possibile cercare "è" in un motore di ricerca se * + "è" * nella query di ricerca in cui si richiede la corrispondenza su è. – Alex

+3

non è ovviamente – DLauer

risposta

28

Prova

if (!(myVariable is SomeType)) 
+0

The! dovrebbe essere all'interno della staffa. se (! (myVariable is SomeType) – Brandon

+0

Questa è la risposta corretta – Maciek

2

Io non sono di fronte ad un compilatore in questo momento quindi non si può controllare, ma non sarebbe

if (!(myVariable is SomeType)) 

lavoro?

7

È necessario racchiudere tra parentesi l'istruzione.

if (!myVariable is SomeType) 

Questa riga applica l'operatore NOT a myVariable, non all'intera istruzione. Prova:

if (!(myVariable is SomeType)) 

Anche se, sarei diffidare del codice che controlla comunque un oggetto per il suo tipo. Potresti voler esaminare il concetto di polimorfismo.

+1

+1 per il commento sul polimorfismo Forse Deane non ne ha bisogno, ma è certamente bello averlo menzionato vicino al codice come questo –

+0

È piuttosto comune controllare per vedere se un oggetto è di un certo tipo, il costrutto foreach lo fa per vedere se l'enumeratore implementa IDisposable. –

+0

non dovrebbe essere abbastanza comune nel tuo codice però. Non ci sono molti compiti in C# che richiedono l'uso di controllare il tipo esplicitamente invece di usare il polimorfismo. Non sto dicendo che non è valido in alcune situazioni, ma non dovrebbe essere "comune". –

4

Jay e Marc hanno il sapore. In alternativa, si potrebbe fare:

var cast = myVariable as SomeType; 
if(cast == null) 
{ 
    // myVariable is not SomeType 
} 

Il vantaggio di questo metodo è che ora avete una variabile già lanciato come SomeType immediatamente disponibili per l'uso.

0

O come su un'estensione generica? Preferisco in questo modo evitare di avere tante parentesi.

in modo da avere:

if (!MyObject.Is<string>()) 
    //Do blah blah blah 

Usando:

public static class ObjectExtensions 
{ 
    public static bool Is<T>(this object ToEvaluate) 
    { 
     return ToEvaluate is T; 
    } 
} 

che sembra più facile da leggere anche.