C# Deconstruction: semplifichiamo l’accesso ai dati
La feature di deconstruction, in italiano decostruzione, permette di recuperare più valori da un oggetto e di suddividerli tra più variabili in modo da gestire singolarmente ognuno di essi e generare codice più leggibile.
Per la rubrica i3 Tips Christian De Simone vi mostrerà l’efficacia di questa feature attraverso due semplici esempi con tuple e tipi custom.
Deconstruction per le tuple
A partire dalla versione 7 di C# le tuple supportano la decostruction [1].
Nell’esempio che segue vediamo un’implementazione classica di inizializzazione di tre variabili, una per la tupla e due per i valori da recuperare:
public void ExampleMethod()
{
var companyInfo = GetCompanyInfo();
var companyName = companyInfo.Item1;
var companyRole = companyInfo.Item2;
}
public Tuple<string, string> GetCompanyInfo();
{
return new Tuple<string, string>("Intré", "Software development");
}
Attraverso la decostruction è possibile inizializzare direttamente le due variabili che conterranno i valori della tupla:
public void ExampleMethod()
{
var (companyName, companyRole) = GetCompanyInfo();
}
public Tuple<string, string> GetCompanyInfo()
{
return new Tuple<string, string>("Intré", "Software development");
}
Deconstruction per tipi custom
La feature di deconstruction non è una prerogativa delle tuple, infatti è possibile sfruttarla anche per tipi custom.
Per fare ciò è necessario implementare il metodo Deconstruct il quale dovrà essere public ed accettare i parametri con la parola chiave out, quindi per riferimento.
Di seguito un esempio:
public void ExampleMethod()
{
var (name, role) = new Company();
}
public class Company
{
public string Name { get; set; }
public string Role { get; set; }
public void Deconstruct(out string name, out string role)
{
name = Name;
role = Role;
}
}
Conclusioni
Utilizzare la decostruction risulta interessante per le tuple, infatti normalmente l’accesso ai valori risulta poco elegante. Con l’introduzione di questa feature l’accesso ai singoli valori diventa pratico e il codice risultante è più leggibile.