Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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
, а внешние фигурные скобки заключают инициализатор для пары "ключ-значение", добавляемой в students
Dictionary<TKey,TValue>. И наконец, целый инициализатор коллекции для словаря заключается в фигурных скобках. Во второй инициализации левая часть оператора присваивания является ключом, а правая часть — значением, использующим инициализатор объекта для StudentName
.
Использование ИИ для инициализации словаря
Вы можете использовать средства ИИ, такие как GitHub Copilot, для создания кода C# для инициализации словаря с помощью инициализатора коллекции. Запрос можно настроить для добавления конкретных требований.
В следующем тексте показан пример запроса для 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 работает на базе ИИ, поэтому возможны неожиданные результаты и ошибки. Дополнительные сведения см. в Copilot Часто задаваемые вопросы.