2010-10-05 7 views
6

Mögliche Duplizieren:
What is the “??” operator for?Was ist die Verwendung von "??"

Bitte erklären Sie mir, was die Verwendung von "??" ist im unteren Code und was ist "??" benutzt für.

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

{ e.Description = "Bestelldatum darf nicht in der Zukunft sein."; Rückgabe false; }

der obige Code ist bei http://nettiers.com/EntityLayer.ashx

Dank.

+3

'' ?? als solche könnte zu suchen hart sein, aber die Suche nach "C# -Syntax" oder "C# -Operatoren" bringt Sie ziemlich schnell zu den Antworten. –

Antwort

9

(Dies ist ein Duplikat, aber es ist schwer zu suchen, also bin ich glücklich genug, um mehr ein neues Ziel für zukünftige Suchen zu schaffen ...)

Es ist die null-coalescing operator. Im Wesentlichen wertet es den ersten Operanden aus, und wenn das Ergebnis Null ist (entweder eine Nullreferenz oder der Nullwert für einen Nullwerttyp), wertet es den zweiten Operanden aus. Das Ergebnis ist effektiv, welcher Operand zuletzt ausgewertet wurde.

Beachten Sie, dass aufgrund seiner Assoziativität, können Sie schreiben:

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

wenn E1, E2, E3 und E4 sind alle Ausdrücke vom Typ int? - mit E1 und Fortschritt beginnen wird, bis es einen nicht findet Nullwert

Der erste Operand muss ein NULL-fähiger Typ sein, aber der zweite Operand darf nicht NULL-zulässig sein. In diesem Fall ist der gesamte Ausdruckstyp nicht NULL-zulässig. Angenommen, E4 ein Ausdruck des Typs ist int (aber der ganze Rest sind noch int? dann können Sie x nicht-nullable machen:

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

wirklich nützlich zu wissen - funktioniert es in den meisten Programmiersprachen? –

+0

@Thomas: Nein, nur C# soweit ich weiß. VB kann haben etwas Ähnliches, und einige andere Sprachen haben Null-Safe-Deferenzierung –

+0

@Thomas Clayson: Ein null-koaleszierender Operator existiert grundsätzlich in [C# und Perl] (http://en.wikipedia.org/wiki/Null_coalescing_operator) ab Version 5.10 (Perl Syntax ist '//'). –