C# 为什么我可以对只读属性使用初始值设定项语法

C# 为什么我可以对只读属性使用初始值设定项语法,c#,C#,我有一个Manager类,具有以下两个属性: public class Manager() { private string _name; private List<int> _reportingEmployeesIds; public string Name { get { return _name; }} public List<int> ReportingEmployeesIds { get {return _reportingEmployeesId

我有一个
Manager
类,具有以下两个属性:

public class Manager()
{
  private string _name;
  private List<int> _reportingEmployeesIds;
  public string Name { get { return _name; }}
  public List<int> ReportingEmployeesIds { get {return _reportingEmployeesIds; } }  
两个属性中都缺少set属性,但编译器允许设置
ReportingEmployeeSID
,而不允许设置Name属性(错误:property或indexer Manager.Name无法分配给,它是只读的)


为什么会这样?为什么编译器不抱怨
ReportingEmployeesIds
是只读的。

ReportingEmployeesIds={2345432521}没有设置属性。它是对每个项目调用
Add(…)
的缩写。您始终可以添加,即使对于只读列表属性也是如此

要使其成为一个集合,需要:

ReportingEmployeesIds = new List<int> {2345, 432, 521}
基本上是:

var m = new Manager();
m.Name = "Dave";
var tmp = m.ReportingEmployeesIds;
tmp.Add(2345);
tmp.Add(432);
tmp.Add(521);

m.ReportingEmployeesIds
是否真的保存在
tmp
变量中,但每次调用
Add
时都不会被访问?
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);