usar unario ternario sharp operator operadores operador logicos jerarquia ejemplos como check asignacion c# null evaluation

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.