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.