假设我们有以下类;
public class WithInit
{
public List<string> List;
public WithInit()
{
List = new List<string> { "one" };
}
}
然后我们这样做;
var withInit = new WithInit { List = { "two", "three" } };
Assert.AreEqual(3, withInit.List.Count);
Jon Skeet指出.Add(...)
被称为public class NoInit
{
public List<string> List;
}
。虽然它明显发生,但C#规范是否定义了这个功能?
现在,如果我们有类似的东西;
var one = new NoInit { List = new List<string> { "two", "three" } }; // works
var two = new NoInit { List = { "two", "three" } }; // compiles, but runtime error
然后;
NullReferenceException
第二个会抛出一个List<>
,我可以推断它是因为new
从未初始化。但是,这些行正在做两件事 - 第一行指定对List<>
&#39; d .Add(...)
的引用,但第二行确定已存在非空引用,因此执行{{1}}。
c#如何/为什么这样做?