Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Me preguntaba sobre los signos de ?? en el código C # . ¿Para qué sirve? ¿Y cómo puedo usarlo?

¿Qué pasa con int? ? ¿Es un int nulable?

Ver también:

  

?? Operador de unión nula - > ¿Qué significa coalescente?

¿Fue útil?

Solución

Se llama el " operador de unión nula " y funciona algo como esto:

En lugar de hacer:

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

Ahora puedes simplemente hacer:

int result = number ?? 0;

Otros consejos

Es el operador de unión nula . Fue introducido en C # 2.

El resultado de la expresión a ?? b es a si no es nulo, o b de lo contrario. 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 se utilizan tipos de valores que admiten valores nulos:

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

    (Tenga en cuenta que no puede utilizar un tipo de valor no anulable como primer operando; sería sin sentido.)

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

    string address = shippingAddress ?? billingAddress ?? contactAddress;
    

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

Ese es el operador coalesce. Esencialmente es taquigrafía para lo siguiente

x ?? new Student();
x != null ? x : new Student();

Documentación MSDN sobre el operador

Es el nuevo operador Null Coalesce.

El ?? el operador devuelve el operando de la izquierda si no es nulo, o si no devuelve el operando de la derecha.

Puedes leerlo aquí: http://msdn.microsoft.com/en-us/ library / ms173224 (VS.80) .aspx

Es un atajo para:

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

es el operador de coalescencia. devolverá otro valor si el primer valor es nulo

string value1 = null;
string value2 = "other";

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

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

Uno de mis usos favoritos para el operador de unión nula es evitar las declaraciones en mi código (creo que las declaraciones son desagradables y simplemente desordenan la mayoría de las veces). Por ejemplo, tome un escenario típico en el que uno podría elegir cargar algo desde el caché si está disponible, de lo contrario, cargar desde la base de datos y rellenar el 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í, eso es un código feo. Puede que sea un poco anal, pero ¿por qué no refactorizarlo a esto en su lugar?

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, OMI. Las funciones realizan exactamente una función claramente identificable cada una.

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

Devuelve el primer valor no nulo. Handy.

?? Operador de fusión nula

int? es un int anulable, lo que significa que puede tener los valores de un int normal y nulo. Lea esto para obtener más información.

Ese es el operador de fusión nula . Se usa con tipos anulables (entre otras cosas , lo siento :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top