Der folgende Code kompiliert, aber nicht mit einem NullReferenceException
:C# Wörterbuch initializer Kompilation Inkonsistenz
class Test
{
public Dictionary<string, string> Dictionary { get; set; }
}
static void Main(string[] args)
{
var x = new Test
{
Dictionary = // fails
{
{ "key", "value" }, { "key2", "value2" }
}
};
}
Wenn Sie die Zeile markiert ersetzen 'versagt' mit dem folgenden, es funktioniert (wie erwartet):
Dictionary = new Dictionary<string, string>
Gibt es einen Zweck für die fehlerhafte Syntax - kann sie in einem anderen Fall erfolgreich verwendet werden? Oder ist das ein Versehen im Compiler?
So Es wird verwendet, um Elemente zu einem Wörterbuch hinzuzufügen, das vom Konstruktor erstellt wurde - das hätte ich erkennen sollen. Aber es ist eine seltsame Verwendung des Gleichheitsoperators, da der Effekt darin besteht, zu dem zu addieren, was bereits im Wörterbuch vorhanden ist (der Konstruktor hat möglicherweise zuerst Elemente hinzugefügt). –
Sortierung, ja ... aber es wird auch verwendet, um die Anfangswerte in der Sammlung festzulegen, also passt es auf diese Weise. –
Richtig. Das fehlende 'new' sollte eine rote Fahne sein ... aber ohne diese Syntax zu benutzen, habe ich den Gleichheitsoperator zu wörtlich genommen. –