Поделиться через


Практическое руководство. Инициализация словаря с помощью инициализатора коллекции (Руководство по программированию на C#)

Dictionary<TKey,TValue> содержит коллекцию пар «ключ-значение». Ее метод Add принимает два параметра: один для ключа, другой — для значения. Для инициализации Dictionary<TKey,TValue> или любой коллекции, метод Add которой принимает несколько параметров, можно заключить каждый набор параметров в скобки, как показано в приведенном ниже примере. Другой вариант — использовать инициализатор индекса, как показано также в следующем примере.

Примечание.

Основное различие между этими двумя способами инициализации коллекции заключается в том, как обрабатываются повторяющиеся ключи, например:

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

метод Add вызывает ArgumentException: 'An item with the same key has already been added. Key: 111', а вторая часть примера — общедоступный метод индексатора чтения и записи, тихо перезаписывает уже имеющуюся запись с тем же ключом.

Пример

В следующем примере кода Dictionary<TKey,TValue> инициализируется экземплярами типа StudentName. Первая инициализация использует метод Add с двумя аргументами. Компилятор создает вызов метода Add для каждой пары ключа int и значения StudentName. Во втором случае используется общедоступный метод индексатора для чтения и записи класса 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}");
        }
    }
}

Обратите внимание на две пары фигурных скобок в каждом элементе коллекции в первом объявлении. Внутренние фигурные скобки заключают инициализатор объекта для StudentName, а внешние фигурные скобки заключают инициализатор для пары "ключ-значение", добавляемой в studentsDictionary<TKey,TValue>. И наконец, целый инициализатор коллекции для словаря заключается в фигурных скобках. Во второй инициализации левая часть оператора присваивания является ключом, а правая часть — значением, использующим инициализатор объекта для StudentName.

Использование искусственного интеллекта для создания тестовых данных для коллекций словарей

Вы можете использовать средства ИИ, такие как GitHub Copilot, для быстрого создания тестовых данных словаря и сценариев проверки в проектах C#.

Ниже приведен пример запроса, который можно использовать в Visual Studio Copilot Chat.

Generate data collections for tests to create a separate Dictionary<int, Student> containing 10 valid Student records and 5 invalid records. 
- Valid records should have realistic Name and Grade values.
- Invalid records should include cases such as missing Name, Grade < 0, or Grade > 100. 
- This dictionary should be used only for testing purposes and not modify existing production code.
- Generate test code that utilizes this test data for validation scenarios.
- Call test method to run the test.

Ознакомьтесь с предложениями Copilot, прежде чем применять их.

Дополнительные сведения о GitHub Copilot см. в часто задаваемых вопросых о GitHub.

См. также