Dictionary の初期化方法 ({} と [] の違い)

C# では、Dictionary<TKey, TValue> を初期化する方法として { key, value } 形式["key"] = value 形式 の 2 つがあります。


1. { key, value } 形式の初期化

この方法は、Dictionary<TKey, TValue> の標準的な初期化方法で、Add メソッドと同じ動作をします。

var dict = new Dictionary<string, int>
{
    { "apple", 1 },
    { "banana", 2 },
    { "cherry", 3 }
};

ポイント

  • Add メソッドを内部的に使用するため、同じキーがあると例外 (ArgumentException) が発生 する。
  • 可読性が高く、従来の Dictionary<TKey, TValue> の初期化に適している。

この書き方は、次のコードと同じ意味を持ちます。

var dict = new Dictionary<string, int>();
dict.Add("apple", 1);
dict.Add("banana", 2);
dict.Add("cherry", 3);

2. ["key"] = value 形式の初期化

C# 6 以降では、インデクサー [] を使って Dictionary<TKey, TValue> を初期化することもできます。

var dict = new Dictionary<string, int>
{
    ["apple"] = 1,
    ["banana"] = 2,
    ["cherry"] = 3
};

ポイント

  • {} の中で [ を使うことで、より簡潔に記述できる。
  • Add とは異なり、同じキーを設定すると上書きされる。(dict["apple"] = 100; のような振る舞い)
  • Dictionary<TKey, TValue> だけでなく、カスタムクラスのインデクサーにも利用可能。

この書き方は、次のコードと同じ意味を持ちます。

var dict = new Dictionary<string, int>();
dict["apple"] = 1;
dict["banana"] = 2;
dict["cherry"] = 3;

3. {}[] の違いと使い分け

初期化方法特徴
{ "key", value }Add と同様の動作、キーが重複するとエラー
["key"] = valueキーが重複しても上書き可能、簡潔な記述が可能

どちらの方法も利用可能なので、エラーを防ぐために Add の振る舞いが欲しいなら {}、簡潔に記述したいなら [] を選ぶとよいでしょう。

コレクション

Posted by hidepon