Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Null coalescing assigment "??=", el nuevo operador de asignación en C# 8

En esta ocasión vamos a ver una pequeña novedad de C# 8 destinada a mejorar la codificación de un escenario muy frecuente: asignar un valor a una variable si ésta es nula.
Recordad que C#8 está aún en preview, y para usarlo hay que seguir los pasos que vimos en un post anterior.
En otras palabras, esta mejora pretende simplificar implementaciones como las siguientes, donde comprobamos si una variable contiene null y, en caso afirmativo, le asignamos un valor:
...
var defaultValue = ... // lo que sea;
var x = GetSomething();

// Usando un bloque if:
if(x == null)
{
x = defaultValue;
}

// O bien, usando el null coalescing operator:
x = x ?? defaultValue;

La solución propuesta en C# 8 ha sido la introducción del operador null coalescing assignment ??=, de forma que cualquiera de los bloques anteriores podría escribirse de la siguiente forma:
x ??= defaultValue;
Para verlo en acción sobre un ejemplo práctico, implementaremos la clásica propiedad con backing field que solemos usar para inicializar propiedades de tipo colección de forma lazy, es decir, sólo cuando vamos a utilizarlas. En versiones de C# anteriores a la 8, sería algo así:
public class Invoice
{
private ICollection _lines;

public ICollection Lines
{
get => _lines ?? (_lines = new HashSet());
set => _lines = value;
}
}
Y ahora, quedará algo más compacto:
    public class Invoice
{
private ICollection _lines;

public ICollection Lines
{
get => _lines ??= new HashSet(); // set => _lines = value;
}
}
En fin, sin ser algo revolucionario, sí es uno de esos pequeños detalles que continúan haciendo de C# un lenguaje cada vez más completo... ;)

Publicado en Variable not found.


This post first appeared on Variable Not Found, please read the originial post: here

Share the post

Null coalescing assigment "??=", el nuevo operador de asignación en C# 8

×

Subscribe to Variable Not Found

Get updates delivered right to your inbox!

Thank you for your subscription

×