Partilhar via


Como inicializar um dicionário com um inicializador de coleção (Guia de Programação em C#)

A Dictionary<TKey,TValue> contém uma coleção de pares chave/valor. Seu Add método usa dois parâmetros, um para a chave e outro para o valor. Uma maneira de inicializar um Dictionary<TKey,TValue>, ou qualquer coleção cujo método Add usa vários parâmetros, é colocar cada conjunto de parâmetros entre chaves, conforme mostrado no exemplo a seguir. Outra opção é usar um inicializador de índice, também mostrado no exemplo a seguir.

Nota

A principal diferença entre essas duas maneiras de inicializar a coleção é como as chaves duplicadas são tratadas, por exemplo:

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

O método Add lança ArgumentException: 'An item with the same key has already been added. Key: 111', enquanto a segunda parte do exemplo, que é o método indexador público de leitura/gravação, substitui de forma silenciosa a entrada já existente com a mesma chave.

Dica

Você pode usar a assistência de IA para inicializar um dicionário.

Exemplo

No exemplo de código a seguir, a Dictionary<TKey,TValue> é inicializada com instâncias do tipo StudentName. A primeira inicialização usa o Add método com dois argumentos. O compilador gera uma chamada para Add para cada um dos pares de int chaves e StudentName valores. O segundo usa um método indexador público de leitura/gravação da Dictionary classe:

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

Observe os dois pares de chaves em cada elemento da coleção na primeira declaração. As chaves mais internas incluem o inicializador de objeto para o StudentName, e as chaves mais externas incluem o inicializador para o par chave/valor a ser adicionado ao studentsDictionary<TKey,TValue>. Finalmente, todo o inicializador da coleção para o dicionário está delimitado por chavetas. Na segunda inicialização, o lado esquerdo da atribuição é a chave e o lado direito é o valor, usando um inicializador de objeto para StudentName.

Usar IA para inicializar um dicionário

Você pode usar ferramentas de IA, como o GitHub Copilot, para gerar código C# para inicializar um dicionário com um inicializador de coleção. Você pode personalizar o prompt para adicionar detalhes de acordo com suas necessidades.

O texto a seguir mostra um exemplo de prompt para o 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.

O GitHub Copilot é alimentado por IA, então surpresas e erros são possíveis. Para obter mais informações, consulte Copilot FAQs.

Consulte também