C# - Uso del operador null-coalescing

Cuando trabajamos con datos que vienen desde base de datos tenemos distintas maneras de asignar la información a sus correspondientes variables, el operador null-coalescing nos permite hacer ese manejo de datos de una forma más simple y más fácil de leer

C# - ??

Cuando trabajamos con datos que vienen desde SQL o desde alguna otra fuente estamos acostumbrados a utilizar el operador condicional (?) para hacer la asignación de un valor a una variable dependiendo de lo que nos arroje nuestra condición.

Ejemplo:

string text = dbText == null ? "" : dbText;

Esta forma nos es muy útil y simplifica nuestro código ya que no necesitamos crear un bloque if-else para asignar un valor u otro dependiendo de una condición dada

Sin embargo, hay ocasiones en las que el uso de este operador condicional vuelve muy larga nuestra línea de código cuando necesitamos hacer conversiones de datos

Ejemplo:

int number = row["NumberValue"] == null ? Convert.ToInt32(row["NumberValue"]) : 0;

Para evitar esto desde la versión de C# 7.3 tenemos la opción de utilizar el operador null-coalescing  (??) donde éste evalúa que el valor a su izquierda no sea nulo y en caso de que éste sea nulo entonces regresa el valor de la derecha

Ejemplo

int number = dbValue ?? 0;

Incluso si tomamos el ejemplo anterior en el que necesitamos hacer conversiones podemos simplificarla haciendo cast directamente, siempre que estemos seguros que el valor que nos viene de la base de datos tiene el tipo de dato correcto, tomando el mismo ejemplo de conversión nuestro código quedaría de la siguiente manera:

int number = (int)row["NumberValue"] ?? 0;

De este manera simplificamos significativamente nuestro código de tal manera que llegamos al mismo fin sin escribir tanto ni haciendo conversiones innecesarias. Además podemos dar otros usos para este operador por ejemplo:

string name = null;
return name ?? "name cannot be null";

También podemos usarlo para el manejo de erorres en caso de necesitarlo

string response = name ?? throw new Exception("Name cannot be null");

Además también existe el operador null-coalescing assignment que está disponible desde la versión de C# 8.0 donde éste evalúa si la variable a la izquierda es nula, en caso de ser nula le asigna el valor del lado derecho del operador, en caso contrario mantiene el valor original de la variable intacto

Ejemplo:

string text = null;
text ??= "Some text";

Con estos dos operadores "??"  y "??=" podemos simplificar de una manera significativa nuestro código en la forma en la que asignamos valores a partir del cumplimiento de una condición que evalúa valores nulos e incluso manejar las excepciones que necesitemos al evaluar de la misma manera nuestras variables y/o objetos.

Sé productivo. Sé extraordinario. Sé INAVANT.