.NET Framework 4.0 beta 1: Tuple

di Cristian Civera, in .NET 4.0,

Altro post per un'altra novità del .NET Framework 4.0: le classi Tuple. In pratica sono delle classi generiche con tanti argomenti generici quanti sono le relative proprietà che esse espongono.

Per esempio Tuple<T1, T2> ha una proprietà Item1 di tipo T1 e una proprietà Item2 di tipo T2. Ci vengono molto comode per quelle volte che nei nostri algoritmi, per velocizzare la scrittura del codice (o per pigrizia :-) ), abbiamo bisogno di una classe che faccia da repository dei valori. Inoltre la loro caratteristica è di implementare GetHashCode, Equals e l'interfaccia IComparable, IStructuralEquatable (nuova in .NET 4.0) e IStructuralComparable (nuova in .NET 4.0) in modo che a parità dei valori, due istanze di Tuple diverse risultino uguali. Si comportano quindi come un valore atomico e sono l'ideale per essere utilizzate come chiavi per dictionary o per hash set.

Per capirci quindi:

var t = Tuple.Create<Int32, String>(2, "ciao");
var t2 = Tuple.Create<Int32, String>(2, "ciao");

Console.WriteLine(t.Item2);
Console.WriteLine("Reference equals: {0}", Object.ReferenceEquals(t, t2));
Console.WriteLine("Equals: {0}", t.Equals(t2));

stampa a video:

ciao
Reference equals: False
Equals: True

In effetti c'è una forte somiglianza agli anonymous type sebbene quest'ultimi sono generati dal compilatore e hanno proprietà dal nome che vogliamo. In comune hanno infatti che due istanze diverse, ma con identici valori, risultano uguali se comparati tra loro. Non implementano però IStructuralEquatable, ma non credo che questo sia un problema. Se necessitiamo di lavorare a livello d'interfaccia allora tanto vale restituire una tuple nelle nostre query.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese