Отсутствующая запятая имеет значение. Это заставляет индексатор ["OtherAs"]
быть примененным к этому словарю:
new Dictionary<string, object>
{
["Name"] = "Solo",
["Points"] = 88
}
Итак, по сути, вы говорите:
new Dictionary<string, object>
{
["Name"] = "Solo",
["Points"] = 88
}["OtherAs"] = new List<Dictionary<string, object>>
{
new Dictionary<string, object>
{
["Points"] = 1999
}
};
Обратите внимание, что это выражение присваивания (x = y
). Здесь x
- это словарь с «Именем» и «Точками», индексированный с помощью "OtherAs"
, а y
- это List<Dictionary<string, object>>
. Выражение присваивания оценивается по присваиваемому значению (y
), которое является списком словарей.
Результат всего этого выражения затем присваивается ключу «MyA», поэтому «MyA» имеет список словарей.
Вы можете подтвердить, что это то, что происходит, изменив тип словаря x
:
new Dictionary<int, object>
{
[1] = "Solo",
[2] = 88
}
// compiler error saying "can't convert string to int"
// so indeed this indexer is applied to the previous dictionary
["OtherAs"] = new List<Dictionary<string, object>>
{
new Dictionary<string, object>
{
["Points"] = 1999
}
}
Вот ваш код, но переформатирован и некоторые скобки добавлено, чтобы проиллюстрировать, как его проанализировал компилятор:
["MyA"]
=
(
(
new Dictionary<string, object>
{
["Name"] = "Solo",
["Points"] = 88
}["OtherAs"]
)
=
(
new List<Dictionary<string, object>>
{
new Dictionary<string, object>
{
["Points"] = 1999
}
}
)
)