2010-10-05 10 views
6

Eventuali duplicati:
What is the “??” operator for?Che cosa è l'uso di "??"

Si prega di spiegare a me che cosa è l'uso di "??" nel codice sottostante e cosa è "??" usato per.

if ((this.OrderDate ?? DateTime.MinValue) > DateTime.Today) 

{ e.Description = "data dell'ordine non deve essere in futuro."; return false; }

il codice di cui sopra è al http://nettiers.com/EntityLayer.ashx

Grazie.

+3

'' ?? in quanto tale, potrebbe essere difficile per cercare, ma la ricerca di "Sintassi C#" o "Operatori C#" abbastanza rapidamente ti porta alle risposte: –

risposta

9

(Questo è un duplicato, ma è difficile per cercare, quindi sono abbastanza felice di fornire più un altro obiettivo per le ricerche future ...)

E 'il null-coalescing operator. In sostanza valuta il primo operando e se il risultato è nullo (un riferimento nullo o un valore nullo per un tipo di valore nullable), valuta il secondo operando. Il risultato è qualsiasi altro operando è stato valutato per ultimo, in modo efficace.

Si noti che a causa della sua associatività, è possibile scrivere:

int? x = E1 ?? E2 ?? E3 ?? E4; 

se E1, E2, E3 e E4 sono tutte espressioni di tipo int? - si inizierà con E1 e progresso finché non trova un non- valore nullo.

Il primo operando deve essere un tipo annullabile, ma un secondo operando può essere non annullabile, nel qual caso il tipo di espressione generale non è annullabile. Ad esempio, supponiamo E4 è un'espressione di tipo int (ma tutto il resto sta ancora int? allora si può fare x non annullabile:

int x = E1 ?? E2 ?? E3 ?? E4; 
+0

davvero utile da sapere - funziona nella maggior parte dei linguaggi di programmazione? –

+0

@Thomas: No, solo C# per quanto ne so. qualcosa di simile, e alcune altre lingue hanno il deferencing nullo. –

+0

@Thomas Clayson: un operatore a coalizione nulla esiste fondamentalmente in [C# e Perl] (http://en.wikipedia.org/wiki/Null_coalescing_operator) dalla versione 5.10 (La sintassi del Perl è '//'). –