Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2698

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

$
0
0
.NET CoreEn 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<InvoiceLine> _lines;

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

public ICollection<InvoiceLine> Lines
{
get => _lines ??= new HashSet<InvoiceLine>(); // <- Here!
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.

Viewing all articles
Browse latest Browse all 2698