Ich bin auf Folgendes gestoßen und frage mich, warum es keinen Syntaxfehler ausgelöst hat.
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
}
}
};
Beachten Sie, dass das "," zwischen "MyA" und "OtherAs" fehlt.
Hier passiert die Verwirrung:
- Der Code wird kompiliert.
- Das endgültige Wörterbuch "dict" enthält nur drei Elemente: "Id", "Tribes" und "MyA".
- Der Wert für alle außer "MyA" ist korrekt,
- "MyA" nimmt den deklarierten Wert für "OtherAs" an, während der ursprüngliche Wert ignoriert wird.
Warum ist das nicht illegal? Ist das beabsichtigt?
<string, string> and modify Points to
"88" , wird ein Compilerfehler angezeigt. "Der Typ 'System.Collections.Generic.List <System.Collections.Generic.Dictionary <Zeichenfolge, Objekt >>' kann nicht implizit in 'Zeichenfolge' konvertiert werden." was mir tatsächlich geholfen hat, die Antwort herauszufinden!
var test = new Dictionary<string, object> { ["Name"] = "Solo", ["Points"] = 88 }["OtherAs"] = new List<Dictionary<string, object>> { new Dictionary<string, object> { ["Points"] = 1999 } };
wird es weiter erklären.
OtherAs
als würde es zunächst als Schlüssel für dasMyA
Wörterbuch hinzugefügt . (Name = Solo, Punkte = 88 plus OtherAs = Liste <Wörterbuch <Zeichenfolge, Objekt >>), außer dass es dann nie zugewiesen wird . Stattdessen wird die Liste der Diktate platziert, die jetzt nur noch den Eintrag "Einzelpunkte = 1999" in denMyA
Slot enthält und überschreibt, was man für dort hingehört.