Initialisierer der leeren Auflistung für Listeneigenschaft führt zu null
Wenn ich diesen Code ausführen, es wird nicht initialisiertThisIsAList
zu einer leeren Sammlung, wie ich erwartet hatte ... stattdessenThisIsAList
war null.
void Main()
{
var thing = new Thing
{
ThisIsAList = {}
};
Console.WriteLine(thing.ThisIsAList == null); // prints "True"
}
public class Thing
{
public List<string> ThisIsAList { get; set; }
}
Warum ist das kein Kompilierungsfehler? Warum ist das Ergebnisnull
?
Ich habe mich gefragt, ob hier möglicherweise eine implizite Konvertierung stattfindet, aber die folgenden Versuche haben zu Kompilierungsfehlern geführt:
thing.ThisIsAList = Enumerable.Empty<string>().ToArray();
List<int> integers = { 0, 1, 2, 3 };
Nach MSDN-Dokumentation amcollection initializers, es klingt wie ein Auflistungsinitialisierer behandelt im Grunde nur den Aufruf vonAdd()
für dich. Also habe ich nach möglichen Überladungen gesucht, umList.Add
, habe aber nichts gefunden, von dem ich denke, dass es zutreffen würde.
Kann jemand erklären, was hier in der C # -Spezifikation vor sich geht?