Delen via


Een woordenlijst initialiseren met een initialisatiefunctie voor verzamelingen (C#-programmeerhandleiding)

A Dictionary<TKey,TValue> bevat een verzameling sleutel-/waardeparen. De Add methode gebruikt twee parameters, één voor de sleutel en één voor de waarde. Een manier om een Dictionary<TKey,TValue>, of een verzameling waarvan Add de methode meerdere parameters gebruikt, te initialiseren, is door elke set parameters tussen accolades te plaatsen, zoals wordt weergegeven in het volgende voorbeeld. Een andere optie is het gebruik van een index-initialisatiefunctie, ook weergegeven in het volgende voorbeeld.

Notitie

Het belangrijkste verschil tussen deze twee manieren om de verzameling te initialiseren is dat bij het dupliceren van sleutels bijvoorbeeld:

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

Add de methode genereert ArgumentException: 'An item with the same key has already been added. Key: 111', terwijl het tweede deel van het voorbeeld, de openbare indexeermethode voor lezen /schrijven, de reeds bestaande vermelding met dezelfde sleutel overschrijft.

Opmerking

In het volgende codevoorbeeld wordt een Dictionary<TKey,TValue> geïnitialiseerd met exemplaren van het type StudentName. De eerste initialisatie maakt gebruik van de Add methode met twee argumenten. De compiler genereert een aanroep naar Add elk van int de paren sleutels en StudentName waarden. De tweede maakt gebruik van een openbare indexeermethode voor lezen/schrijven van de Dictionary klasse:

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

Let op de twee accolades in elk element van de verzameling in de eerste declaratie. De binnenste accolades zetten de object-initialisatiefunctie voor de StudentNameen de buitenste accolades tussen de initialisatiefunctie voor het sleutel/waardepaar dat aan de students Dictionary<TKey,TValue>sleutel/waardepaar moet worden toegevoegd. Ten slotte wordt de volledige initialisatiefunctie voor de verzameling voor de woordenlijst tussen accolades opgenomen. In de tweede initialisatie is de linkerkant van de toewijzing de sleutel en de rechterkant de waarde, met behulp van een object-initializer voor StudentName.

Zie ook