Я натрапив на таке, і мені цікаво, чому це не призвело до синтаксичної помилки.
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".
Тут відбувається плутанина:
- Код складається.
- Заключний словник "диктант" містить лише три елементи: "Id", "Plemen" та "MyA".
- Значення для всіх, крім "MyA", є правильним,
- "MyA" приймає оголошене значення для "OtherAs", тоді як його початкове значення ігнорується.
Чому це не незаконно? Це за дизайном?
<string, string> and modify Points to
"88" `, тоді ви отримаєте помилку компілятора" Неможливо неявно перетворити тип "System.Collections.Generic.List <System.Collections.Generic.Dictionary <string, object >> 'to' 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 = Список <Словник <рядок, об'єкт >>), за винятком того, що він ніколи не призначає . Натомість він розміщує список диктів, тепер містить лише єдиний запис пунктів = 1999 уMyA
слот, який переосмислює те, що, на його думку, там належить.