经过广泛的调试会议后,我发现问题在于我调用了readonly属性的setter.发生这种情况时是否有引发编译器警告的技巧?因为将setter私有标记不起作用.
干杯,
CA
说清楚我的意思:
private readonly List<SomeObject> _budget;
public IEnumerable<SomeObject> Budget
{
get
{
return _budget;
}
}
Run Code Online (Sandbox Code Playgroud)
可以访问
A.Budget=new SomeObject();
Run Code Online (Sandbox Code Playgroud)
没有编译器{错误,警告,消息}
如果您的酒店有一个setter,它不是只读的.删除setter使其成为只读.
public string MyProperty // not read-only
{
get { return myPropertyBacking; }
set { myPropertyBacking = value; }
}
public string MyProperty // read-only
{
get { return myPropertyBacking; }
}
Run Code Online (Sandbox Code Playgroud)
你在这里混淆了什么.在您的示例中,如果您尝试在类中A.Budget=new SomeObject();的属性没有setter时,编译器将产生错误.从这里开始,我只能假设你的问题是什么.BudgetA
我的猜测是你希望包含在Budget属性中的集合是只读的.这可能就是你制作它的原因,IEnumerable<SomeObject>而私人会员则是List<SomeObject>.因此,即使你没有安装者,你仍然可以做到(A.Budget as List<SomeObject>).Add(bla).要禁止此操作,您可以像这样使用List.AsReadOnly:
private readonly List<SomeObject> _budget;
public ReadOnlyCollection<SomeObject> Budget
{
get
{
return _budget.AsReadOnly();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10941 次 |
| 最近记录: |