c# - unario - Operador nulo-condicional y!=
operadores de asignacion en c# (3)
Con el valor devuelto por el operador Null-Conditional siempre puede ser nulo
if ((instance?.Val ?? 0) != 0)
Si la instancia era nula, entonces la instancia? .Val también será nula (¿probablemente int? En su caso). Por lo tanto, siempre debe verificar nulos antes de comparar con algo:
if ((instance?.Val ?? 0) != 0)
Esto significa: si la instancia? .Val es nula (porque la instancia es nula), entonces devuelve 0. De lo contrario, devuelve instance.Val. Luego compara este valor con 0 (no es igual a).
Con la introducción de Operadores Null-Conditional en C #, para la siguiente evaluación,
if (instance != null && instance.Val != 0)
Si lo reescribo de esta manera,
if (instance?.Val != 0)
se evaluará como verdadero si instancia es una referencia nula; Se comporta como
if (instance == null || instance.Val != 0)
Entonces, ¿cuál es la forma correcta de reescribir la evaluación utilizando esta nueva sintaxis?
Editar:
instance
es un campo de un objeto grande que se deserializa de JSON. Hay bastantes códigos como este, primero compruebe si el campo está en el JSON, si es así, verifique si la propiedad Val NO es igual a una constante, solo ambas condiciones son verdaderas, realice alguna operación.
El código en sí se puede refactorizar para hacer que el flujo lógico tenga más sentido, como lo indica Peter en su comentario, aunque en esta pregunta me interesa cómo usar null-conditional operators
con null-conditional operators
con !=
.
Puede utilizar el operador nulo de coallescing:
instance?.Val ?? 0
Cuando la instance
es nula o la instance
no es nula, pero Val
es, la expresión anterior se evaluaría a 0. De lo contrario, se devolvería el valor de Val
.
if ((instance?.Val).GetValueOrDefault() != 0)
el ? el operador condicional tratará automáticamente la propiedad .Val como un Nullable.