KeyValue のオブジェクト初期化子はインデックス初期化子にしないと共存できない
◆ new Dictionary<int, int>{ {1, 2} } 形式はプロパティの初期化と一緒に書けない
◆ new Dictionary<int, int>{ [1] = 2 } 形式なら書ける
◆ new Dictionary<int, int>{ [1] = 2 } 形式なら書ける
KeyValue のオブジェクト初期化子は
と
の 2 種類があります
下側はインデックス初期化子と言って C# 6.0 からの機能です
下のほうが新しい分使いやすいですが 値のペアとして書く場合は 上のほうが見やすいケースもあるのでその場に応じて使い分けていました
ですが 上の書き方だとプロパティと一緒に初期化するときに制限があるようです
一緒に初期化することはめったにないのですが 必要になったのでやってみたら下の書き方じゃないとダメでした
Dictionary にプロパティをつけたクラスを定義します
並びを変えてプロパティを後にしても変わらずエラーです
プロパティを書かなければ問題なく動きます
旧式の書き方でもプロパティの初期化と共存させることってできないのかな
var value = new Dictionary<int, int>
{
{1, 2},
};
{
{1, 2},
};
と
var value = new Dictionary<int, int>
{
[1] = 2,
};
{
[1] = 2,
};
の 2 種類があります
下側はインデックス初期化子と言って C# 6.0 からの機能です
下のほうが新しい分使いやすいですが 値のペアとして書く場合は 上のほうが見やすいケースもあるのでその場に応じて使い分けていました
ですが 上の書き方だとプロパティと一緒に初期化するときに制限があるようです
一緒に初期化することはめったにないのですが 必要になったのでやってみたら下の書き方じゃないとダメでした
Dictionary にプロパティをつけたクラスを定義します
class D : Dictionary<string, string>
{
public bool flag {get; set;}
}
{
public bool flag {get; set;}
}
new D
{
flag = true,
["key1"] = "value1",
["key2"] = "value2",
}
OK{
flag = true,
["key1"] = "value1",
["key2"] = "value2",
}
new D
{
flag = true,
{"key1", "value1"},
{"key2", "value2"},
}
エラー{
flag = true,
{"key1", "value1"},
{"key2", "value2"},
}
並びを変えてプロパティを後にしても変わらずエラーです
プロパティを書かなければ問題なく動きます
new D
{
{"key1", "value1"},
{"key2", "value2"},
}
{
{"key1", "value1"},
{"key2", "value2"},
}
旧式の書き方でもプロパティの初期化と共存させることってできないのかな