Я наткнулся на следующее, и мне интересно, почему это не вызывает синтаксическую ошибку.
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».
- Значение для всех, кроме "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 плюс OtherAs = List <Dictionary <string, object >>) за исключением того, что оно никогда не назначает его . Вместо этого он помещает список диктов, теперь содержащий только одну запись Points = 1999, вMyA
ячейку, переопределяющую то, что, как можно подумать, принадлежит ей.