C# aggiornamento entity

C# – Tuple

Se da un metodo dobbiamo ritornare più di un valore possiamo utilizzare uno dei seguenti modi:

  • utilizzare un parametro con la parola chiave out (passaggio per riferimento)
  • ritornare una struttura dati o una classe
  • ritornare un tipo anonimo tramite un tipo dinamico (sconsigliato!)

La quarta soluzione possibile sono le tuple, introdotte all’interno del framework 4.0 e referenziate all’interno di System.Tuple.

Una tupla è una struttura dati che rappresenta un insieme di dati

E’ possibile creare una tupla utilizzando il costruttore nel seguente modo:

In particolare è da notare che il tipo di dato memorizzato in una tupla non deve necessariamente essere lo stesso: nell’esempio precedente abbiamo creato una tupla con due elementi di tipo stringa ed uno intero.

In C# è possibile utilizzare tuple fino a 7 elementi. Nel caso in cui fosse necessario creare tuple con più elementi è possibile utilizzare l’ottavo elemento, tipizzandolo come una nuova tupla.

Ovviamente le tuple possono essere utilizzate come valore di ritorno da un metodo, ma anche come parametro.

Utilizzando System.ValueTuple sono inoltre disponibili tuple di tipo valore, cioè non viene effettuata l’allocazione delle risorse nella memoria heap (con tutto ciò che ne consegue anche a livello di GAC).

Le tuple sono preferibili nello sviluppo di codice che necessita l’ottimizzazione delle performance.

E’ possibile assegnare una tupla utilizzando la sintassi light:

oppure definire il nome dei campi :

è anche possibile utilizzare la sintassi:

per definire il nome dei campi restituiti da un metodo.

Limiti

A runtime il nome dei campi delle tuple viene cancellato. Questo rappresenta sicuramente un limite: non è possibile utilizzare la reflection.

Questa limitazione si ripercuote anche sull’utilizzo delle tuple con razor. Supponiamo di avere la seguente classe con il metodo Person che restituisce una tupla:

e di avere il controller:

che restituisce alla view la tupla. Cercando di accedere ai campi all’interno della View riceveremo un errore (non viene riconosciuto il nome del campo).

‘ValueTuple<string, int>’ does not contain a definition for ‘Name’ and no extension method ‘Name’ accepting a first argument of type ‘ValueTuple<string, int>’ could be found (are you missing a using directive or an assembly reference?)

 

 

 

Pubblicato da

Andrea Merlin

Laureato in informatica, diversi corsi di specializzazione legati allo Sviluppo Software e alla Computer forensics. Appassionato di nuove tecnologie, amo la programmazione, la Business Intelligence e tematiche legate alla Privacy.Sempre alla ricerca di nuove idee, stimoli … e progetti da seguire!Amo trascorrere il tempo libero in Val Borbera, un piccolo angolo del Piemonte, in provincia di Alessandria.