Mi sono imbattuto in quanto segue e mi chiedo perché non abbia generato un errore di sintassi.
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
}
}
};
Si noti che "," manca tra "MyA" e "OtherAs".
Questo è dove si verifica la confusione:
- Il codice viene compilato.
- Il dizionario finale "dict" contiene solo tre elementi: "Id", "Tribes" e "MyA".
- Il valore per tutti tranne "MyA" è corretto,
- "MyA" accetta il valore dichiarato per "OtherAs", mentre il suo valore originale viene ignorato.
Perché questo non è illegale? Questo è di progettazione?
<string, string> and modify Points to
"88" `viene visualizzato un errore del compilatore" Impossibile convertire in modo implicito il tipo 'System.Collections.Generic.List <System.Collections.Generic.Dictionary <stringa, oggetto >>' in 'stringa' " che in realtà mi ha aiutato a capire la risposta!
var test = new Dictionary<string, object> { ["Name"] = "Solo", ["Points"] = 88 }["OtherAs"] = new List<Dictionary<string, object>> { new Dictionary<string, object> { ["Points"] = 1999 } };
lo spiegherai ulteriormente.
OtherAs
venga aggiunto come chiave in quello che sarebbe ilMyA
dizionario. (Nome = Solo, Punti = 88 più OtherAs = Elenco <Dizionario <stringa, oggetto >>) tranne che non lo assegna mai . Invece inserisce la lista dei dicts, che ora contiene solo la singola voce Points = 1999 nelloMyA
slot sovrascrivendo ciò che si potrebbe pensare appartenga lì.