Code, Learn

C# Deconstruction: semplifichiamo l’accesso ai dati

3 Settembre 2020 - 1 minuto di lettura

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.

Articolo scritto da