C#のコレクション初期化子とインデックス初期化子

コレクション初期化子

コレクション初期化子は、C# 3.0から使える初期化構文です。

var d = new Dictionary<string, int>
{
    { "太郎", 90},
    { "次郎", 80},
    { "花子", 95},
};

コレクション初期化子はAddメソッドへ変換されます。

上記のコードは、次のコードと同じ意味です。

var tmp = new Dictionary<string, int>();
tmp.Add("太郎", 90);
tmp.Add("次郎", 80);
tmp.Add("花子", 95);
var d = tmp;

インデックス初期化子

インデックス初期化子は、C# 6.0から使える初期化構文です。

var d = new Dictionary<string, int>
{
    ["太郎"] = 90,
    ["次郎"] = 80,
    ["花子"] = 95,
};

インデックス初期化子はインデクサによるアクセスに変換されます。

var tmp = new Dictionary<string, int>();
tmp["太郎"] = 90;
tmp["次郎"] = 80;
tmp["花子"] = 95;
var d = tmp;

そのため、インデクサがあればDictionaryでなくても使用できます。

class Sample
{
    public string this[string key] { get => ""; set { } }
}
var s = new Sample
{
    ["key2"] = "Key2",
    ["key3"] = "Key3",
};

また、プロパティへの代入と一緒に使用できます。

class Sample
{
    public string Key1 { get; set; }
    public string this[string key] { get => ""; set { } }
}

var s = new Sample
{
    Key1 = "key1",
    ["key2"] = "Key2",
    ["key3"] = "Key3",
};

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください