NET5: Record Type - Deconstruct

Tra le novità introdotte in net5 possiamo trovare i Record Type e personalmente li ho trovati molto interessanti. Se vi siete persi l’articolo con cui hanno debuttato sul mio blog vi invito a leggere NET5: Record Type scritto verso la fine di Gennaio. Per questo motivo passero’ dritto al cuore del contenuto.

Nello specifico oggi voglio mostrarvi come utilizzare i Deconstruct all’interno del vostro codice.

NET5: Record Type Deconstruct

Inserire un Deconstruct nei record type e’ davvero semplice. Per farlo non mi resta che modificare il record type del post NET5: Record Type - copia e modifica e modificarlo come segue

Definizione

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
public record Pizza
{
    public string Name { get; init; }
    public string Ingredients { get; init;}
    public decimal Price { get; init;}

    public Pizza(string name, string ingredients, decimal price)
        => (Name, Ingredients, Price) = (name, ingredients, price);


    public void Deconstruct(
        out string name,
        out string ingredients, 
        out decimal price)
    {
        name = Name;
        ingredients = Ingredients;
        price = Price;
    }        
}

TIPS: Vi invito a notare la presenza di Deconstruct

Utilizzo

1
2
3
var pizza = new Pizza("Name of Pizza", "Ingredients of Pizza", 10);

var (nameOf, ingredientOf, priceOf) = pizza;

Come avrete visto non e’ per nulla difficile ottenere ed utilizzare un Deconstruct. Personalmente pero’ devo ancora capirne il senso ed il contesto nel quale utilizzarlo.

Deconstruct Parziale?

Si, avete letto bene! Quando definito un Deconstruct non dovete per forza definire come out tutte le properties. Nel seguente esempio modificheremo il codice d’apertura per farvi capire meglio.

1
2
3
4
5
6
7
public void Deconstruct(
    out string name,
    out decimal price)
{
    name = Name;
    price = Price;
}

ed a questo punto l’utilizzo avverra’ nel seguente modo

1
var (nameOf, priceOf) = pizza;