我有一个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属性(错误:属性或索引器Manager.Name不能分配给它,它只是readonly)。
为什么会这样?为什么编译器不抱怨ReportingEmployeesIds
只读。
答案 0 :(得分:9)
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);