这个问题已经有了答案:
Initializing list property without “new List” causes NullReferenceException
5个答案
我有一个Manager类,具有以下两个属性:

public class Manager()
{
  private string _name;
  private List<int> _reportingEmployeesIds;
  public string Name { get { return _name; }}
  public List<int> ReportingEmployeesIds { get {return _reportingEmployeesIds; } }

我正试图创建一个Manager类的实例,如下所示
Manager m = new Manager
{
   Name = "Dave", // error, expected
   ReportingEmployeesIds = {2345, 432, 521} // no compile error - why?
};

两个属性中都缺少set属性,但编译器允许设置ReportingEmployeesIds,但不允许设置name属性(错误:property或indexer manager.name不能分配给,它是只读的)。
为什么是这个案子?为什么编译器不抱怨ReportingEmployeesIds是只读的。

最佳答案

ReportingEmployeesIds = {2345, 432, 521}不设置属性。这是用每个项目调用Add(...)的简写。即使对于只读列表属性,也可以始终Add
要使它成为一套,它需要:

ReportingEmployeesIds = new List<int> {2345, 432, 521}

相反,这句话:
Manager m = new Manager {Name = "Dave", ReportingEmployeesIds = {2345, 432, 521} }

本质上是:
var m = new Manager();
m.Name = "Dave";
var tmp = m.ReportingEmployeesIds;
tmp.Add(2345);
tmp.Add(432);
tmp.Add(521);

09-26 21:50
查看更多