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.

Veröffentlicht von Norbert Eder

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen