Sdílet prostřednictvím


Inicializace slovníku inicializátorem kolekce (Průvodce programováním v C#)

A Dictionary<TKey,TValue> obsahuje kolekci párů klíč/hodnota. Jeho Add metoda přebírá dva parametry, jeden pro klíč a jeden pro hodnotu. Jedním ze způsobů, jak inicializovat , nebo jakoukoli kolekci Dictionary<TKey,TValue>, jejíž Add metoda přebírá více parametrů, je uzavřít každou sadu parametrů do složených závorek, jak je znázorněno v následujícím příkladu. Další možností je použít inicializátor indexu, který je znázorněn také v následujícím příkladu.

Poznámka:

Hlavním rozdílem mezi těmito dvěma způsoby inicializace kolekce je způsob zpracování duplicitních klíčů, například:

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

Add metoda vyvolá ArgumentException: 'An item with the same key has already been added. Key: 111', zatímco druhá část příkladu, veřejná metoda indexeru pro čtení a zápis, tiše přepíše již existující položku stejným klíčem.

Spropitné

Pomocí pomoci s AI můžete inicializovat slovník.

Příklad

V následujícím příkladu kódu je Dictionary<TKey,TValue> inicializován s instancemi typu StudentName. První inicializace používá metodu Add se dvěma argumenty. Kompilátor vygeneruje volání Add pro každou dvojici int klíčů a StudentName hodnot. Druhý používá veřejnou metodu indexeru pro čtení a zápis třídy Dictionary.

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}");
        }
    }
}

Všimněte si dvou dvojic složených závorek v každém prvku kolekce v první deklaraci. Vnitřní složené závorky ohraničují inicializátor pro StudentName, zatímco vnější složené závorky ohraničují inicializátor pro pár klíč/hodnota, který se má přidat do studentsDictionary<TKey,TValue>. Nakonec se celý inicializátor kolekce pro slovník uzavře do složených závorek. V druhé inicializaci je levá strana přiřazení klíč a pravá strana je hodnota pomocí inicializátoru objektu pro StudentName.

Inicializace slovníku pomocí AI

Pomocí nástrojů AI, jako je GitHub Copilot, můžete vygenerovat kód jazyka C#, který inicializuje slovník pomocí inicializátoru kolekce. Výzvu můžete přizpůsobit tak, aby se podle vašich požadavků přidaly konkrétní údaje.

Následující text ukazuje příklad výzvy pro Copilot Chat:

Generate C# code to initialize Dictionary<int, Employee> using key-value pairs within the collection initializer. The employee class is a record class with two properties: Name and Age.

GitHub Copilot využívá technologii AI, takže jsou možná překvapení a chyby. Další informace najdete v nejčastějších dotazech ke copilotu.

Viz také