初始化其父对象时设置C#List属性

时间:2015-02-19 06:22:24

标签: c#

假设我们有以下类;

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#如何/为什么这样做?

0 个答案:

没有答案