经过广泛的调试 session 后,我发现问题出在我调用了只读属性的 setter 。发生这种情况时是否有技巧来引发编译器警告?因为将 setter 标记为私有(private)不起作用。
干杯,
CA
明确我的意思:
private readonly List<SomeObject> _budget;
public IEnumerable<SomeObject> Budget
{
get
{
return _budget;
}
}
可以访问
A.Budget=new SomeObject();
没有编译器{error,warning,message}
最佳答案
你在这里混淆了一些东西。在您的示例中,如果您尝试执行 A.Budget=new SomeObject();
,编译器将产生错误。如果属性Budget
在类里面A
没有二传手。
从这里开始,我只能假设您的问题是什么。
我的猜测是您希望将集合包装在 Budget
中属性为只读。这可能就是你成功的原因 IEnumerable<SomeObject>
而私有(private)成员是 List<SomeObject>
.所以即使你没有二传手,你仍然可以做 (A.Budget as List<SomeObject>).Add(bla)
.要禁止此操作,您可以使用 List.AsReadOnly像这样:
private readonly List<SomeObject> _budget;
public ReadOnlyCollection<SomeObject> Budget
{
get
{
return _budget.AsReadOnly();
}
}
关于c# - 只读属性 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691090/