このコードを実行するThisIsAList
と、期待どおりに空のコレクションに初期化されません...代わりThisIsAList
にnullでした。
void Main()
{
var thing = new Thing
{
ThisIsAList = {}
};
Console.WriteLine(thing.ThisIsAList == null); // prints "True"
}
public class Thing
{
public List<string> ThisIsAList { get; set; }
}
なぜこれはコンパイルエラーではないのですか? 結果はなぜnull
ですか?
ここで暗黙の変換が行われているのではないかと思っていましたが、次の試行でコンパイル エラーが発生しました。
thing.ThisIsAList = Enumerable.Empty<string>().ToArray();
List<int> integers = { 0, 1, 2, 3 };
コレクション初期化子に関するMSDNのドキュメントによると、コレクション初期化子は基本的に呼び出しAdd()
を処理するだけのようです。そこで、 への可能なオーバーロードを探しましたがList.Add
、適用できると思われるものは見つかりませんでした。
誰かがここで何が起こっているのかを C# 仕様から説明できますか?