Dela via


Initiera en ordlista med en insamlingsinitierare (C#-programmeringsguide)

A Dictionary<TKey,TValue> innehåller en samling nyckel/värde-par. Metoden Add tar två parametrar, en för nyckeln och en för värdet. Ett sätt att initiera en Dictionary<TKey,TValue>, eller en samling vars Add metod tar flera parametrar, är att omsluta varje uppsättning parametrar i klammerparenteser enligt följande exempel. Ett annat alternativ är att använda en indexinitierare, som också visas i följande exempel.

Kommentar

Den största skillnaden mellan dessa två sätt att initiera samlingen är att om du har duplicerade nycklar, till exempel:

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

Add metoden genererar ArgumentException: 'An item with the same key has already been added. Key: 111', medan den andra delen av exemplet, metoden public read/write indexer, tyst skriver över den redan befintliga posten med samma nyckel.

Tips

Du kan använda AI-hjälp för att initiera en ordlista med GitHub Copilot.

Exempel

I följande kodexempel initieras en Dictionary<TKey,TValue> med instanser av typen StudentName. Den första initieringen använder Add metoden med två argument. Kompilatorn genererar ett anrop till Add för vart och ett av paren int med nycklar och StudentName värden. Den andra använder en offentlig read/write indexer-metod för Dictionary klassen:

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

Observera de två paren med klammerpar i varje element i samlingen i den första deklarationen. De innersta klammerparenteserna omger objektinitieraren för StudentName, och de yttersta klammerparenteserna omger initieraren för nyckel/värde-paret som ska läggas till i studentsDictionary<TKey,TValue>. Slutligen omges hela insamlingsinitieraren för ordlistan av klammerparenteser. I den andra initieringen är den vänstra sidan av tilldelningen nyckeln och den högra sidan är värdet, med hjälp av en objektinitierare för StudentName.

Använda GitHub Copilot för att initiera en ordlista

Du kan använda GitHub Copilot i din IDE för att generera C#-kod för att initiera en ordlista med en insamlingsinitierare. Du kan anpassa uppmaningen för att lägga till detaljer enligt dina krav.

Följande text visar en exempelfråga för 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 drivs av AI, så överraskningar och misstag är möjliga. Mer information finns i vanliga frågor och svar för Copilot.

Läs mer om GitHub Copilot i Visual Studio och GitHub Copilot i VS Code.

Se även