Tuples erfuhren in C# 7.0 große Veränderungen. Dieser Beitrag liefert alles Wissenswerte – und natürlich Beispiele.

Tuples sind in .NET nicht neu, vielmehr jedoch, wie mit ihnen bisher umgegangen wird. Dieser Beitrag bringt dir das Thema näher.

Was sind Tuples?

Tuples stellen eine geordnete, nicht veränderbare Liste von Werten dar. Schon vor C# 7.0 gab es Tuples. Hier ein Beispiel dazu:

var myTuple1 = Tuple.Create<string, string>("norbert", "eder");
var myTuple2 = new Tuple<string, string>("norbert", "eder");

Console.WriteLine($"{myTuple1.Item1} {myTuple1.Item2}");

Wie an diesem Beispiel zu sehen, ist die Verwendung etwas umständlich. Die „Liste“ enhält bis zu 8 Elemente, welche über die Eigenschaften Item1, Item2 etc. verfügbar sind.

Verwendungszweck

Wozu können Tuples verwendet werden?

  • Abbildung von mehreren Datenwerten in einem Datensatz
  • Abbildung einer Datenstruktur für z.B. Berechnungen
  • Manipulation einer um schnell Manipulationen durchzuführen
  • Rückgabe mehrerer Werte von einer Funktion ohne out oder ref verwenden zu müssen
  • Übergabe von mehreren Werten an eine Methode repräsentiert durch eine einzige Variable

Neues in C# 7.0

Was aber ist nun neu in C# 7.0? Einiges, aber zu allererst muss man sich ein Nuget-Paket installieren: System.ValueTuple.

Danach kann es mit den ersten Beispielen los gehen:

var newTuple1 = ("norbert", "eder");
var newTuple2 = (firstname: "norbert", lastname: "eder");

Console.WriteLine($"{newTuple2.firstname} {newTuple2.lastname}");

Mehrere Datenwerte können folgendermaßen per Funktion zurückgegeben werden:

private (string,string,string) GetData(long id)
{
    return ("eins", "zwei", "drei");
}

private (string eins, string zwei, string drei) GetData2(long id)
{
    return ("eins", "zwei", "drei");
}

Dabei wird über die Tuple Types beschrieben, wieviele Werte welchen Typs zurückgeliefert werden. Wahlweise können den Tuple-Elementen Namen gegeben werden. Im ersten Fall muss per Item1, Item2 und Item3 auf die Werte zugegriffen werden. Im zweiten Beispiele sind sie mit eins, zwei und drei benannt.

Die große Änderung in C# 7 ist nun, dass Tuples als Werttypen behandelt werden. Dadurch ergibt sich ein Vorteil in der Performance und eine bessere Möglichkeit zur Steuerung des Speicherverbrauchs.

Das System.ValueTuple-Paket hängt auch Extension-Methods an ValueTuple und Tuple. Damit können diese einfach umgewandelt werden.

So fein das nun auch alles klingt, sollte man sich doch gut überlegen, wann Tuples sinnvoll eingesetzt werden können.

Über den Autor

Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler und Fotograf. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Hinterlasse einen Kommentar