Condividi tramite


Come inizializzare un dizionario con un inizializzatore di insieme (Guida per programmatori C#)

Un oggetto Dictionary<TKey,TValue> contiene una raccolta di coppie chiave-valore. Il relativo metodo Add accetta due parametri, uno per la chiave e uno per il valore. Un modo per inizializzare un oggetto Dictionary<TKey,TValue> o qualsiasi raccolta il cui metodo Add accetta più parametri, consiste nel racchiudere ogni set di parametri tra parentesi graffe, come illustrato nell'esempio seguente. Un'altra opzione consiste nell'usare un inizializzatore di indice, come mostrato nell'esempio seguente.

Nota

La differenza principale tra questi due modi per inizializzare la raccolta è la modalità di gestione delle chiavi duplicate, ad esempio:

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

Add metodo genera ArgumentException: 'An item with the same key has already been added. Key: 111', mentre la seconda parte dell'esempio, il metodo pubblico di lettura/scrittura dell'indicizzatore, sovrascrive in modo silenzioso la voce già esistente con la stessa chiave.

Suggerimento

È possibile usare l'assistenza per l'intelligenza artificiale per inizializzare un dizionario.

Esempio

Nell'esempio di codice seguente, viene inizializzato un oggetto Dictionary<TKey,TValue> con istanze di tipo StudentName. La prima inizializzazione usa il metodo Add con due argomenti. Il compilatore genera una chiamata a Add per ognuna delle coppie di chiavi int e valori StudentName. Il secondo utilizza un metodo indicizzatore pubblico di lettura e scrittura della classe 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}");
        }
    }
}

Si noti che vi sono due coppie di parentesi graffe in ogni elemento della raccolta nella prima dichiarazione. Le parentesi più interne racchiudono l'inizializzatore di oggetto per StudentName, mentre quelle più esterne racchiudono l'inizializzatore per la coppia chiave/valore che viene aggiunta a studentsDictionary<TKey,TValue>. Infine, l'intero inizializzatore di collezione per il dizionario è racchiuso tra parentesi graffe. Durante la seconda inizializzazione, il lato sinistro dell'assegnazione è la chiave e il lato destro è il valore, usando un inizializzatore di oggetto per StudentName.

Usare l'intelligenza artificiale per inizializzare un dizionario

È possibile usare strumenti di intelligenza artificiale, ad esempio GitHub Copilot, per generare codice C# per inizializzare un dizionario con un inizializzatore di raccolta. È possibile personalizzare il prompt per aggiungere specifiche in base ai requisiti.

Il testo seguente mostra un esempio di richiesta di chat di Copilot:

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 è basato sull'intelligenza artificiale, quindi sono possibili sorprese ed errori. Per altre informazioni, vedere domande frequenti su Copilot.

Vedi anche