Initialisieren eines Wörterbuchs mit einem Auflistungsinitialisierer (C#-Programmierhandbuch)

Eine Dictionary<TKey,TValue> enthält eine Sammlung von Schlüssel-Wert-Paaren. Die Add-Methode nimmt zwei Parameter an, einen für den Schlüssel und einen für den Wert. Eine Möglichkeit, um eine Dictionary<TKey,TValue>-Klasse oder eine beliebige Sammlung zu initialisieren, deren Add-Methode mehrere Parameter annimmt, ist es, jedes Parameterpaar in Klammern einzuschließen, so wie im folgenden Beispiel dargestellt. Eine andere Möglichkeit besteht darin, einen Index-Initialisierer zu verwenden, wie im nächsten Beispiel gezeigt wird.

Hinweis

Der Hauptunterschied zwischen diesen beiden Initialisierungsmethoden für die Sammlung ist folgender, wenn duplizierte Schlüssel vorhanden sind:

{ 111, new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 } },
{ 111, new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } }, 

Die Add-Methode löst ArgumentException aus: 'An item with the same key has already been added. Key: 111', und der zweite Teil des Beispiels, also die Indexermethode für Lese-/Schreibvorgänge, überschreibt die vorhandenen Einträge mit demselben Schlüssel.

Beispiel

Im folgenden Codebeispiel wird Dictionary<TKey,TValue> mit Instanzen vom Typ StudentName initialisiert. Die erste Initialisierung verwendet die Add-Methode mit zwei Argumenten. Der Compiler führt für Add einen Aufruf für jedes der Paare von int-Schlüsseln und StudentName-Werten durch. Bei der zweiten Initialisierung wird eine öffentliche Indexermethode der Dictionary-Klasse für Lese- und Schreibvorgänge verwendet:

public class HowToDictionaryInitializer
{
    class StudentName
    {
        public string? FirstName { get; set; }
        public string? LastName { get; set; }
        public int ID { get; set; }
    }

    public static void Main()
    {
        var students = new Dictionary<int, StudentName>()
        {
            { 111, new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 } },
            { 112, new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } },
            { 113, new StudentName { FirstName="Andy", LastName="Ruth", ID=198 } }
        };

        foreach(var index in Enumerable.Range(111, 3))
        {
            Console.WriteLine($"Student {index} is {students[index].FirstName} {students[index].LastName}");
        }
        Console.WriteLine();		

        var students2 = new Dictionary<int, StudentName>()
        {
            [111] = new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 },
            [112] = new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } ,
            [113] = new StudentName { FirstName="Andy", LastName="Ruth", ID=198 }
        };

        foreach (var index in Enumerable.Range(111, 3))
        {
            Console.WriteLine($"Student {index} is {students2[index].FirstName} {students2[index].LastName}");
        }
    }
}

Beachten Sie die zwei Paare geschweifter Klammern in jedem Element der Collection in der ersten Deklaration. Die inneren Klammern umschließen den Objektinitialisierer für StudentName, und die äußeren Klammern umschließen den Initialisierer für das Schlüssel-Wert-Paar, das studentsDictionary<TKey,TValue> hinzugefügt wird. Schließlich wird der ganze Auflistungsinitialisierer für das Wörterbuch in geschweifte Klammern eingeschlossen. Bei der zweiten Initialisierung ist die linke Seite des Arbeitsauftrags der Schlüssel und die rechte Seite ist der Wert. Für StudentName wird ein Objektinitialisierer verwendet.

Weitere Informationen