具有自动属性的Collection Initializers

时间:2011-04-21 20:05:24

标签: .net collections syntax properties

有没有办法在使用自动属性时使用集合初始值设定项?

// Uses collection initializer but not automatic properties
private List<int> _numbers = new List<int>();
public List<int> Numbers
{
    get { return _numbers; }
    set { _numbers = value; }
}


// Uses automatic properties but not collection initializer
public List<int> Numbers { get; set; }


// Is there some way to do something like this??
public List<int> Numbers { get; set; } = new List<int>();

2 个答案:

答案 0 :(得分:4)

不,基本上。您必须在构造函数中初始化集合。说实话,可设置的集合很少是一个好主意无论如何;我实际上只使用(更改你的第一个版本,删除set):

private readonly List<int> _numbers = new List<int>();
public List<int> Numbers { get { return _numbers; } }

或者如果我想在第一次访问之前推迟构建:

private List<int> _numbers;
public List<int> Numbers {
    get { return _numbers ?? (_numbers = new List<int>()); }
}

答案 1 :(得分:1)

  

// Is there some way to do something like this??

     

public List<int> Numbers { get; set; } = new List<int>();

没有。您必须在显式定义的构造函数中初始化,这里没有要应用的字段初始化技巧。

此外,这与集合初始化器无关。你也无法初始化

public object Foo { get; set; }

在构造函数之外。