La classe Tuple presente nel .NET Framework 4.0 fornisce metodi statici che ci permettono di creare tuple di valori. Per tupla o più precisamente ennupla si intende una collezione ordinata di oggetti di cui è nota la posizione. La classe Tuple ci permette di creare tuple di oggetti anche di tipi diversi tra loro attraverso l'uso dei generics. Per creare ad esempio una tupla che contenga i primi 8 numeri primi possiamo scrivere:
var numeriPrimi = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);
In questo caso ho utilizzato il metodo Create che crea la tupla riconoscendo automaticamente i tipi degli oggetti specificati.
Possiamo però istanziare una tupla anche specificando esplicitamente i tipi di ciascun elemento:
var numeriPrimi = new Tuple (2, 3, 5, 7, 11, 13, 17, 19);
ma anche:
var myTupla = new Tuple ("Ciao!", 3, 5);
I metodi statici esposti dalla classe Tuple ci consentono di creare direttamente tuple sino ad un massimo di 8 elementi. Per tuple con un numero di elementi superiore dobbiamo utilizzare l'overload del costruttore della classe Tuple che consente di specificare come ottavo parametro una nuova tupla. Quindi ad esempio per creare una tupla di 10 elementi possiamo scrivere:
var myTupla = new Tuple>(1, 2, 3, 4, 5, 6, 7, new Tuple(8, 9));
I valori di una tupla sono recuperabili attraverso le sette proprietà di istanza a sola lettura Item1, Item2, Item3, Item4, Item5, Item6 ed Item7. Eventuali altri valori contenuti in tuple annidate possono essere recuperati attraverso la proprietà Rest.
Le tuple possono essere molto utili ad esempio quando ci serve ritornare più di un valore da un metodo. Con le tuple possiamo risolvere facilmente questo problema senza utilizzare i più scomodi parametri out (o ByRef in VB.NET).