In C#, wenn ichDer Operator + = mit Nullable-Typen in C#
int? x = null;
x += x ?? 1
schreiben würde ich erwarten, dass dies äquivalent zu sein:
int? x = null;
x = x + x ?? 1
und damit im ersten Beispiel x
würde enthält 1
wie im zweiten Beispiel. Aber es ist nicht, es enthält null. Der Operator "+ =" scheint nicht auf nullwertfähige Typen zu arbeiten, wenn sie nicht zugewiesen wurden. Warum sollte das der Fall sein?
Bearbeiten: Wie bereits erwähnt, ist es, weil null + 1 = null
und Betreiber Vorrang hat. In meiner Verteidigung, ich glaube, diese Linie in der MSDN mehrdeutig ist !:
Die vordefinierten unären und binären Operatoren und alle benutzerdefinierten Operatoren, die für Werttypen existieren auch von Nullable- Typen verwendet werden können. Diese Operatoren erzeugen einen Nullwert, wenn [ Operanden null sind; Andernfalls verwendet der Operator den enthaltenen Wert , um das Ergebnis zu berechnen. Hier
+1 Ah, Operator Vorrang, mein alter Feind. Sie schlagen wieder! – JDB
Hat '' '' keinen Vorrang vor '+'? (@ Servys Antwort) –
@AustinSalonen Nein. http://msdn.microsoft.com/en-us/library/6a71f45d.aspx –