En C#, si escriboEl operador + = con tipos anulables en C#
int? x = null;
x += x ?? 1
que sería de esperar que esto sea equivalente a:
int? x = null;
x = x + x ?? 1
Y así en el primer ejemplo, x
lo haría contiene 1
como en el segundo ejemplo. Pero no es así, contiene nulo. El operador + = no parece funcionar en tipos anulables cuando no se han asignado. ¿Porqué debería ser este el caso?
Editar: Como se señaló, es porque null + 1 = null
y la precedencia del operador. En mi defensa, creo que esta línea en el MSDN es ambigua !:
Los operadores unarios y binarios predefinidos y cualquier operadores definidos por el usuario que existen para los tipos de valor también puede ser utilizada por anulables tipos. Estos operadores producen un valor nulo si [cualquiera de] los operandos son nulos; de lo contrario, el operador usa el valor contenido en para calcular el resultado.
+1 Ah, la precedencia de operadores, mi antiguo enemigo. ¡Golpeas de nuevo! – JDB
¿'' 'no tiene precedencia sobre' + '? (Respuesta de @Servy) –
@AustinSalonen Nope. http://msdn.microsoft.com/en-us/library/6a71f45d.aspx –