Практическое руководство. Инициализация словаря с помощью инициализатора коллекции (Руководство по программированию на C#)How to initialize a dictionary with a collection initializer (C# Programming Guide)

Dictionary<TKey,TValue> содержит коллекцию пар "ключ-значение".A Dictionary<TKey,TValue> contains a collection of key/value pairs. Ее метод Add принимает два параметра: один для ключа, другой — для значения.Its Add method takes two parameters, one for the key and one for the value. Для инициализации Dictionary<TKey,TValue> или любой коллекции, метод Add которой принимает несколько параметров, можно заключить каждый набор параметров в скобки, как показано в приведенном ниже примере.One way to initialize a Dictionary<TKey,TValue>, or any collection whose Add method takes multiple parameters, is to enclose each set of parameters in braces as shown in the following example. Другой вариант — использовать инициализатор индекса, как показано также в следующем примере.Another option is to use an index initializer, also shown in the following example.

ПримерExample

В следующем примере кода Dictionary<TKey,TValue> инициализируется экземплярами типа StudentName.In the following code example, a Dictionary<TKey,TValue> is initialized with instances of type StudentName. Первая инициализация использует метод Add с двумя аргументами.The first initialization uses the Add method with two arguments. Компилятор создает вызов метода Add для каждой пары ключа int и значения StudentName.The compiler generates a call to Add for each of the pairs of int keys and StudentName values. Вторая инициализация использует общедоступный метод индексатора чтения и записи класса Dictionary:The second uses a public read / write indexer method of the Dictionary class:

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

Обратите внимание на две пары фигурных скобок в каждом элементе коллекции в первом объявлении.Note the two pairs of braces in each element of the collection in the first declaration. Внутренняя пара фигурных скобок заключает инициализатор объекта StudentName, а внешняя пара — инициализатор пары "ключ – значение", которая будет добавлена в коллекцию students Dictionary<TKey,TValue>.The innermost braces enclose the object initializer for the StudentName, and the outermost braces enclose the initializer for the key/value pair that will be added to the students Dictionary<TKey,TValue>. И наконец, весь инициализатор коллекции для словаря заключается в фигурные скобки.Finally, the whole collection initializer for the dictionary is enclosed in braces. Во второй инициализации левая часть оператора присваивания является ключом, а правая часть — значением, использующим инициализатор объекта для StudentName.In the second initialization, the left side of the assignment is the key and the right side is the value, using an object initializer for StudentName.

См. такжеSee also