2010-09-28 16 views
13

Mögliche Duplizieren:
What do two question marks together mean in C#?Was bedeutet ?? Operator bedeutet in C#?

Hallo, ich war für einige Trainings von MVC 2 in C# suchen und ich fand diese sintax:

ViewData["something"] = something ?? true; 

Also, was ist Das '??' meint ?.

+7

Doppelte Frage von http://stackoverflow.com/questions/446835/what-do-two-question-marks-together-mean-in-c? – Crag

+1

Entschuldigung, ich habe danach gesucht und konnte es nicht finden, also habe ich es gepostet. Vielen Dank an euch alle! Ich liebe diese Seite, es gibt eine Antwort für alles: D – pjnovas

Antwort

22

Es ist die null-coalescing operator.

Es gibt das erste Argument zurück, sofern es nicht null ist. In diesem Fall wird das zweite Argument zurückgegeben.

x ?? y entspricht in etwa dem (außer, dass das erste Argument nur einmal ausgewertet wird):

if (x == null) 
{ 
    result = y; 
} 
else 
{ 
    result = x; 
} 

Oder alternativ:

(x == null) ? y : x 

Es ist nützlich für einen Standardwert für, wenn eine Bereitstellung von Wert kann null sein:

Color color = user.FavouriteColor ?? defaultColor; 

COALESCE

Wenn in einer LINQ verwendet, um den ?? Operators SQL-Abfrage kann zu einem Aufruf von COALESCE übersetzt werden. Zum Beispiel dieser LINQ-Abfrage:

var query = dataContext.Table1.Select(x => x.Col1 ?? "default"); 

in dieser SQL-Abfrage führen kann:

SELECT COALESCE([t0].[col1],@p0) AS [value] 
FROM [dbo].[table1] AS [t0] 
+0

Etwas seltsam, 'Objekt x = null ?? null; 'ist eine gültige Aussage. Ich nehme an, Sie können nicht erwarten, dass der Compiler auch Babysitten tut! – RedFilter

+0

ReSharper warnt Sie vor einer möglichen NullReferenceException, wenn Sie nach dieser Anweisung auf ein Mitglied von x verweisen, aber ja, es wird kompiliert. – KeithS

+0

wow! das ist ein schöner Punkt, hehe – pjnovas

5

Es ist der Null-Koaleszenz-Operator. Der Rückgabewert ist die linke Seite, wenn es nicht Null ist, und die rechte Seite andernfalls. Es funktioniert sowohl für Referenztypen als auch für Nullwerte.

var x = "foo" ?? "bar"; // "foo" wins 
string y = null; 
var z = y ?? "bar"; // "bar" wins 
int? n = null; 
var t = n ?? 5; // 5 wins 
3

Wenn etwas null ist, gibt es true zurück, andernfalls gibt es etwas zurück. Weitere Informationen finden Sie unter this link.