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の部分では、パブリック読み取り/書き込みインデクサーメソッドが、既に存在するエントリを同じキーで黙って上書きします。
ヒント
AI アシスタンスを使用して、GitHub Copilot を使用してディクショナリを初期化できます。
例
次のコード例では、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
のオブジェクト初期化子を囲み、最も外側の中かっこは、students
Dictionary<TKey,TValue> に追加されるキーと値のペアの初期化子を囲んでいます。 最後に、ディクショナリのコレクション初期化子全体が中かっこで囲まれています。 2 回目の初期化では、代入の左辺はキーで、右辺は StudentName
のオブジェクトの初期化子を使用する値です。
GitHub Copilot を使用してディクショナリを初期化する
IDE で GitHub Copilot を使用して C# コードを生成し、コレクション初期化子を使用してディクショナリを初期化できます。 プロンプトをカスタマイズして、要件に合わせて詳細を追加できます。
次のテキストは、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 は AI を利用しているため、驚きや間違いが起こりうる可能性があります。 詳細については、Copilot の FAQを参照してください。
Visual Studio の GitHub Copilot と VS Code の GitHub Copilotについて詳しく知る。
関連項目
.NET