Udostępnij za pomocą


Jak zainicjować słownik za pomocą inicjatora kolekcji (Przewodnik programowania w języku C#)

Element Dictionary<TKey,TValue> zawiera kolekcję par klucz/wartość. Metoda Add przyjmuje dwa parametry, jeden dla klucza i jeden dla wartości. Jednym ze sposobów inicjowania Dictionary<TKey,TValue>, lub jakiejkolwiek kolekcji, której metoda Add przyjmuje wiele parametrów, jest ujęcie każdego zestawu parametrów w nawiasach klamrowych, co przedstawiono w poniższym przykładzie. Inną opcją jest użycie inicjatora indeksu, pokazanego również w poniższym przykładzie.

Uwaga

Główną różnicą między tymi dwoma sposobami inicjowania kolekcji jest sposób obsługi zduplikowanych kluczy, na przykład:

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

Add metoda zgłasza ArgumentException: 'An item with the same key has already been added. Key: 111', podczas gdy druga część przykładu, publiczna metoda indeksatora odczytu/zapisu, po cichu zastępuje już istniejący wpis tym samym kluczem.

Przykład

W poniższym przykładzie kodu element Dictionary<TKey,TValue> jest inicjalizowany przy użyciu wystąpień typu StudentName. Pierwsza inicjalizacja Add używa metody z dwoma argumentami. Kompilator generuje wywołanie Add dla każdej pary kluczy int i wartości StudentName. Drugi przykład używa publicznej metody indeksatora odczytu/zapisu klasy 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}");
        }
    }
}

Zwróć uwagę na dwie pary nawiasów klamrowych w każdym elemecie kolekcji w pierwszej deklaracji. Najbardziej wewnętrzne nawiasy klamrowe otaczają inicjator obiektu dla StudentName, a najbardziej zewnętrzne nawiasy klamrowe otaczają inicjator dla pary klucz/wartość, która ma zostać dodana do studentsDictionary<TKey,TValue>. Na koniec cały inicjator kolekcji dla słownika jest ujęty w klamry. W drugiej inicjalizacji lewa strona przypisania jest kluczem, a prawa strona jest wartością z użyciem inicjatora obiektu dla StudentName.

Generowanie danych testowych dla kolekcji słowników przy użyciu sztucznej inteligencji

Możesz użyć narzędzi sztucznej inteligencji, takich jak GitHub Copilot, aby szybko wygenerować dane testowe słownika i scenariusze weryfikacji w projektach języka C#.

Oto przykładowy monit, którego można użyć w programie Visual Studio Copilot Chat.

Generate data collections for tests to create a separate Dictionary<int, Student> containing 10 valid Student records and 5 invalid records. 
- Valid records should have realistic Name and Grade values.
- Invalid records should include cases such as missing Name, Grade < 0, or Grade > 100. 
- This dictionary should be used only for testing purposes and not modify existing production code.
- Generate test code that utilizes this test data for validation scenarios.
- Call test method to run the test.

Przed ich zastosowaniem przejrzyj sugestie Copilota.

Aby uzyskać więcej informacji na temat narzędzia GitHub Copilot, zobacz Często zadawane pytania dotyczące usługi GitHub.

Zobacz też