私は以下に遭遇しましたが、なぜ構文エラーが発生しなかったのかと思います。
var dict = new Dictionary<string, object>
{
["Id"] = Guid.NewGuid(),
["Tribes"] = new List<int> { 4, 5 },
["MyA"] = new Dictionary<string, object>
{
["Name"] = "Solo",
["Points"] = 88
}
["OtherAs"] = new List<Dictionary<string, object>>
{
new Dictionary<string, object>
{
["Points"] = 1999
}
}
};
「MyA」と「OtherAs」の間に「、」がないことに注意してください。
ここで混乱が起こります:
- コードがコンパイルされます。
- 最後の辞書「dict」には、「Id」、「Tribes」、「MyA」の3つの要素しか含まれていません。
- 「MyA」を除くすべての値が正しいです。
- 「MyA」は「OtherAs」の宣言された値を取りますが、元の値は無視されます。
なぜこれは違法ではないのですか?これは仕様ですか?
<string, string> and modify Points to
「88」に変更すると、コンパイラエラー「型 'System.Collections.Generic.List <System.Collections.Generic.Dictionary <string、object >>'を暗黙的に 'string'に変換できません」が表示されます。実際に答えを見つけるのに役立ちました!
var test = new Dictionary<string, object> { ["Name"] = "Solo", ["Points"] = 88 }["OtherAs"] = new List<Dictionary<string, object>> { new Dictionary<string, object> { ["Points"] = 1999 } };
とすると、それをさらに説明します。
OtherAs
ものにキーとして追加されるだろうMyA
辞書。(Name = Solo、Points = 88 plus OtherAs = List <Dictionary <string、object >>)ただし、割り当てられることはありません。代わりに、dictsのリストを配置し、単一のPoints = 1999エントリのみをMyA
スロットに含め、そこに属すると思われるものをオーバーライドします。