HOWTO · Csharp

Eine Liste von Tupeln initialisieren in C#

Dieser Artikel stellt mehrere Ansätze vor, mit denen sich eine Liste von Tupeln in C# effizient initialisieren lässt.

Auf dieser Seite

Um eine Tupelliste in C# zu initialisieren, können Sie zwischen List<Tuple<int, string>> für Referenztupel und List<(int, string)> für Wertetupel wählen. Die Einträge lassen sich mit einem Collection-Initializer erstellen, mit Add() anhängen oder mithilfe von LINQ aus einer vorhandenen Sequenz projizieren. Diese Tupeltypen sind verschieden. Wählen Sie daher den Typ, der zu den übrigen Typen in Ihrem Code passt.

Eine Tupelliste in C# mit der Methode Tuple.Create() initialisieren

Tuple.Create() erstellt ein Referenztupel. Mit einem Collection-Initializer können Sie mehrere Einträge bereits beim Deklarieren einer List<Tuple<int, string>> erstellen:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<Tuple<int, string>>
        {
            Tuple.Create(1, "Apple"),
            Tuple.Create(2, "Banana"),
            Tuple.Create(3, "Cherry")
        };

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Der generische Listentyp legt die Tupel-Elementtypen fest: zuerst ein int, dann ein string. Tuple.Create() leitet diese Typen aus jedem Wertepaar ab. Die Schleife durchläuft die Einträge in der Reihenfolge, in der sie eingefügt wurden. Die Dokumentation zur Methode Tuple.Create() beschreibt die verfügbaren Überladungen.

Eine Tupelliste in C# mit der ()-Notation initialisieren

Eine Liste kann auch Wertetupel enthalten, die mit der ()-Notation geschrieben werden. Dieses Beispiel verwendet List<(int, string)> und initialisiert direkt drei Einträge:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<(int, string)>
        {
            (1, "Apple"),
            (2, "Banana"),
            (3, "Cherry")
        };

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Hier ist (int, string) der Elementtyp des Wertetupels; jedes Klammerpaar steht für einen Listeneintrag. Dieselben Paare lassen sich mit einem anderen Listenelementtyp darstellen. Weitere Informationen finden Sie unter Wertetupel in C#.

Eine Tupelliste in C# mit List<Tuple<T1, T2>> und Add() initialisieren

Verwenden Sie Add(), wenn Einträge nach und nach eintreffen oder die Liste durch Anwendungslogik aufgebaut wird. Erstellen Sie zunächst eine leere Liste und fügen Sie anschließend jedes Referenztupel hinzu:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<Tuple<int, string>>();

        tupleList.Add(Tuple.Create(1, "Apple"));
        tupleList.Add(Tuple.Create(2, "Banana"));
        tupleList.Add(Tuple.Create(3, "Cherry"));

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Der deklarierte Listentyp bestimmt, welche Art von Tupel darin gespeichert wird. Jeder Aufruf von Add() fügt ein Tuple<int, string> hinzu; Tuple.Create() erstellt dieses Referenztupel aus den angegebenen Werten.

Eine Tupelliste in C# mit LINQ initialisieren

LINQ eignet sich, wenn die Tupelwerte aus einer vorhandenen Sequenz stammen. Select() projiziert jede Zahl auf ein Tupel, und ToList() erstellt aus der projizierten Sequenz eine Liste:

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var tupleList = Enumerable.Range(1, 3)
            .Select(i => Tuple.Create(i, $"Fruit{i}"))
            .ToList();

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Enumerable.Range(1, 3) liefert 1, 2 und 3. Die Projektion kombiniert jede Zahl mit einem String, und ToList() gibt eine List<Tuple<int, string>> zurück. Da die Projektion Tuple.Create() verwendet, handelt es sich um Referenztupel.

Fazit

Für eine feste Wertemenge ist ein Collection-Initializer mit Tuple.Create() oder Wertetupel-Literalen kompakt. Verwenden Sie Add(), um eine List<Tuple<T1, T2>> schrittweise aufzubauen, und LINQ, wenn Sie eine vorhandene Sequenz in Tupel-Einträge umwandeln. Referenztupel (Tuple<T1, T2>) und Wertetupel ((T1, T2)) sind unterschiedliche Typen. Verwenden Sie daher durchgehend den Typ, zu dem die APIs und Daten Ihres Codes passen.