次の方法で共有


コレクション初期化子を使用してディクショナリを初期化する方法 (C# プログラミング ガイド)

Dictionary<TKey,TValue> にはキーと値のペアのコレクションが含まれています。 その Add メソッドは、それぞれキーと値に対する 2 つのパラメーターを受け取ります。 Dictionary<TKey,TValue> メソッドが複数のパラメーターを受け取る Add またはコレクションを初期化する 1 つの方法は、次の例に示すように、各パラメーターのセットを中かっこで囲むことです。 もう 1 つのオプションは、インデックス初期化子を使用することです。これも次の例に示されています。

注意

コレクションを初期化するこれら 2 つの方法の主な違いは、重複したキーの処理方法です。次に例を示します。

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

Add メソッドは ArgumentExceptionをスローします: 'An item with the same key has already been added. Key: 111'。一方で、この例の第2の部分では、パブリック読み取り/書き込みインデクサーメソッドが、既に存在するエントリを同じキーで黙って上書きします。

次のコード例では、Dictionary<TKey,TValue> が型 StudentName のインスタンスで初期化されています。 最初の初期化では、Add メソッドを 2 つの引数と共に使用します。 コンパイラにより、Add キーと int 値の各ペアに対して、StudentName への呼び出しが生成されます。 2 回目の初期化では、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}");
        }
    }
}

最初の宣言のコレクションの各要素の中かっこの 2 つのペアに注目してください。 最も内側の中かっこは StudentName のオブジェクト初期化子を囲み、最も外側の中かっこは、studentsDictionary<TKey,TValue> に追加されるキーと値のペアの初期化子を囲んでいます。 最後に、ディクショナリのコレクション初期化子全体が中かっこで囲まれています。 2 回目の初期化では、代入の左辺はキーで、右辺は StudentName のオブジェクトの初期化子を使用する値です。

AI を使用してディクショナリ コレクションのテスト データを生成する

GitHub Copilot などの AI ツールを使用して、C# プロジェクトで辞書テスト データと検証シナリオをすばやく生成できます。

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.

適用する前に、Copilot の提案を確認してください。

GitHub Copilot の詳細については、GitHub の FAQ を参照 してください

関連項目