usar - El operador+= con tipos anulables en C#
operadores de asignacion en c# (1)
En c #, si escribo
int? x = null;
x += x ?? 1
Espero que esto sea equivalente a:
int? x = null;
x = x + x ?? 1
Y así, en el primer ejemplo, x
contendría 1
como en el segundo ejemplo. Pero no lo hace, contiene nulo. El operador + = no parece funcionar en tipos anulables cuando no se han asignado. ¿Porqué debería ser este el caso?
Edición : como se señaló, es porque null + 1 = null
y precedencia del operador. En mi defensa, creo que esta línea en MSDN es ambigua:
Los tipos nulables también pueden utilizar los operadores unarios y binarios predefinidos y cualquier operador definido por el usuario que exista para tipos de valor. Estos operadores producen un valor nulo si [cualquiera de] los operandos son nulos; de lo contrario, el operador utiliza el valor contenido para calcular el resultado.
Aquí está la diferencia entre las dos afirmaciones:
x += x ?? 1
x = (x + x) ?? 1
El segundo no es lo que estabas esperando.
Aquí hay un desglose de ambos:
x += x ?? 1
x += null ?? 1
x += 1
x = x + 1
x = null + 1
x = null
x = x + x ?? 1
x = null + null ?? 1
x = null ?? 1
x = 1