In C#, se scrivoL'operatore + = con i tipi nullable in C#
int? x = null;
x += x ?? 1
mi si aspetterebbe che questo è equivalente a:
int? x = null;
x = x + x ?? 1
E così nel primo esempio, x
avrebbe fatto contenere 1
come nel secondo esempio. Ma non lo fa, contiene null. L'operatore + = non sembra funzionare su tipi nullable quando non sono stati assegnati. Perché dovrebbe essere così?
Modifica: Come sottolineato, è perché null + 1 = null
e la precedenza degli operatori. Nella mia difesa, ritengo questa riga nel MSDN è ambigua !:
Gli operatori unari e binari predefiniti e eventuali operatori definiti dall'utente che esistono per i tipi di valore può essere utilizzato anche da Null tipi. Questi operatori producono un valore null se [uno di] gli operandi sono nulli; in caso contrario, l'operatore utilizza il valore contenuto per calcola il risultato.
+1 Ah, precedenza degli operatori, la mia antica nemico. Colpisci di nuovo! – JDB
Non '??' ha la precedenza su '+'? (@ Risposta di Servy) –
@AustinSalonen No. http://msdn.microsoft.com/en-us/library/6a71f45d.aspx –