tag remarks para example c# operators coalesce null-coalescing-operator

para - remarks c#



¿Para qué sirve el operador "??"? (12)

Devuelve el primer valor no nulo. Práctico.

Esta pregunta ya tiene una respuesta aquí:

Me preguntaba ?? firma en C# código C# . ¿Para qué sirve? ¿Y cómo puedo usarlo?

¿Qué hay de int? ? ¿Es un int nullable?

Ver también:

?? Operador coalescente nulo -> ¿Qué significa coalescencia?


Es el operador coalescente nulo . Fue introducido en C # 2.

El resultado de la expresión a ?? b a ?? b es a si eso no es nulo, o b otro modo. b no se evalúa a menos que sea necesario.

Dos cosas bonitas:

  • El tipo general de la expresión es el del segundo operando, que es importante cuando usa tipos de valores que aceptan valores numéricos:

    int? maybe = ...; int definitely = maybe ?? 10;

    (Tenga en cuenta que no puede usar un tipo de valor que no admite nulos como primer operando; sería inútil).

  • Las reglas de asociatividad significan que puedes encadenar esto muy fácilmente. Por ejemplo:

    string address = shippingAddress ?? billingAddress ?? contactAddress;

Eso utilizará el primer valor no nulo de la dirección de envío, facturación o contacto.



Es un atajo para:

Text = (category == null ? "Home" : category);




Se llama el "operador coalescente nulo" y funciona de la siguiente manera:

En lugar de hacer:

int? number = null; int result = number == null ? 0 : number;

Ahora puede hacer lo siguiente:

int result = number ?? 0;


Uno de mis usos preferidos para el operador nulo coalescente es evitar las declaraciones en mi código (creo que si las declaraciones son feas y complican las cosas la mayoría de las veces). Por ejemplo, tome una situación típica en la que uno pueda elegir cargar algo de la memoria caché, si está disponible, de lo contrario cargue desde la base de datos y rellene la memoria caché.

private SomeData GetData() { var data = HttpRuntime.Cache.Get("key") as SomeData; if (data == null) { data = DAL.GetData(some parameters...); HttpRuntime.Cache.Add("key", data, ....); } return data; }

Para mí, ese es el código feo. Puedo ser un poco anal, pero ¿por qué no refactorizar esto?

private SomeData GetDataAndCache() { var data = DAL.GetData(some parameters...); HttpRuntime.Cache.Add("key", data, ....); return data; } private SomeData GetData() { var data = HttpRuntime.Cache.Get("key") as SomeData; return data ?? GetDataAndCache(); }

Sigue más de cerca a SRP y es más limpio y fácil de leer, IMO. Las funciones realizan exactamente una función claramente identificable cada una.


comprueba si la categoría es nula: cuando este es el caso, el valor nulo se reemplaza por "Inicio".


es el operador de fusión. devolverá otro valor si el primer valor es nulo

string value1 = null; string value2 = "other"; string value3 = value1 ?? value2; // assigns "other" to value 3


si la categoría es nula, el texto se convertirá en "Inicio"


?? Operador nulo-coalescente

¿En t? es un int nullable, lo que significa que puede tener los valores de un int normal y nulo. Lea this para más detalles.