Verwendung von Tupel in C#

Vielen werden Tupel aus dem Bereich der Datenbanken vertraut sein. Ein Tupel ist ein Datentyp der verschiedene andere Datentypen enthält. Beispielsweise kann ein Tupel einen String und einen Integer enthalten. Der Vorteil von Tupeln ist, dass man diese nicht selber schreiben muss. Gerade wenn man viele verschiedene Objekte benötigt, die jeweils unterschiedliche Datentypen enthalten ist dies hilfreich. Falls jedoch ein und dieselbe Art von Tupeln öfter gebraucht wird sollte man auf Tupel verzichten und selber eine Klasse dafür schreiben. Tupel können zwar hilfreich sein, sie können die Lesbarkeit des Codes jedoch auch verschlechtern.

Tupel können an jeder Stelle im Code erzeugt werden. Um einen Tupel zu erzeugen benutzt man Tuple.Create() und gibt die Elemente an, die im Tupel enthalten sein sollen.

var myTupel = Tuple.Create(1, "zwei", 3.0d);

In diesem Beispiel wurde ein Tupel erstellt, der einen Integer, einen String und einen Doublewert besitzt.
Tupel können nicht beliebig groß sein. Die Anzahl der Tupel ist auf 8 Elemente beschränkt. Möchte man einen größeren Tupel erstellen kann man jedoch einen weiteren Tupel innerhalb des Tupels erzeugen.

var myTupel = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10));

Auf die Elemente eines Tupels greift man mit der Eigenschaft ItemX zu. X steht für die Werte 1-8. Bei Tupeln ist es, anders als bei anonymen Typen, nicht möglich selber Namen für die Eigenschaften zu vergeben. Es ist zudem nicht möglich ein Element in einem Tupel zu beschreiben. Alle Eigenschaften sind schreibgeschützt. Der Folgende Code ist demnach unzulässig.

// Fehler !
var myTupel = Tuple.Create(1, 2, 3);
myTupel.Item1 += 1;

Nun fragt man sich für was Tupel nun gedacht sind, da es doch schon anonyme Typen gibt. Der Vorteil von Tupel ist, dass diese auch als Rückgabewert einer Methode benutzt werden können. Das ist mit anonymen Typen nicht möglich.

class Program
{
static void Main(string[] args)
{
Console.WriteLine(Tupelmethode().ToString());
Console.ReadLine();
}

static Tuple<int, int> Tupelmethode()
{
return Tuple.Create(1, 2);
}
}

Wie man an dem Beispiel erkennen kann wurde die Methode ToString() überschrieben. Überschrieben werden zu dem auch die Methoden GetHashcode() und Equals(). In dem Tupel werden dabei jedoch nur die Werte der enthaltenen Elemente miteinander verglichen.
Bookmark and Share

1 Kommentare:

Anonym hat gesagt…

Hier ausführlicher:
http://msdn.microsoft.com/de-de/vcsharp/ee957397.aspx

Kommentar veröffentlichen