【发布时间】:2015-02-27 12:25:26
【问题描述】:
如果有用户数组,那么 SuperUserCount 应该是用户计数的总和,否则它应该有自己的值
class MyUser
{
public int SuperUserCount { get; set; }
private User[] users;
public User[] Users
{
get { return users;}
set
{
users= value;
if(value!=null)
{
SuperUserCount = value.Sum(user => user.count);
}
}
}
}
我编写了上面的代码来获取用户计数的总和。 尚未测试
但是,当填充 MyUser 对象时,如何确保 SuperUserCount 自己的值不会覆盖用户 get{} 中设置的 SuperUserCount 值,反之亦然
【问题讨论】:
-
投反对票的原因?
-
_"...我如何确保 SuperUserCount 自己的值不会覆盖...":只是不要将值保存到 SuperUserCount 中。将它的支持字段更改为 int?如果它为空,它的getter可以直接计算值(假设性能不是问题)。反之亦然?好吧,定义如果你有用户并且你设置了 SuperUserCount 应该发生什么......
-
你在问什么?您有一个公共设置器,但不希望写入该属性?如果你想设置一个初始值但稍后覆盖它然后防止覆盖,只需添加一个标志。不过我会重新考虑这个设计 - 很明显,这个班级正试图同时做两件事
-
@AdrianoRepetti 只有当用户为空时才应该写入公共属性
-
所以写下你的 setter 的正文。
int SuperUserCount { get { return Users != null ? Users.Sum(x => x.count) : _superUserCount; } set { if (Users != null) throw new InvalidOperationException(); _superUserCount = value; } }。在您的Users设置器中,您还可以检查是否在Users之前设置了SuperUserCount属性(以简单地覆盖原始值或在不允许时抛出异常)。当然,在Users中,您直接设置_superUserCount而不是SuperUserCount(对不起,注释中的代码格式错误)。
标签: c# properties