【发布时间】:2012-02-29 21:31:37
【问题描述】:
对于是否使用属性来计算调用值是否有约定?例如,如果我的类包含一个整数列表并且我有一个属性 Average,那么当从列表中添加/删除/修改一个整数时,平均值可能会发生变化,请执行以下操作:
private int? _ave = null;
public int Average
{
get
{
if (_ave == null )
{
double accum = 0;
foreach (int i in myList)
{
accum += i;
}
_ave = accum / myList.Count;
return (int)_ave;
}
else
{
return (int)_ave;
}
}
}
如果 myList 以可能改变平均值的方式进行修改,则 _ave 设置为 null...
与平均方法调用相比,有什么传统的优势/劣势吗?
我基本上只是想知道对此的约定是什么,因为我正在创建一个具有特定属性的类,这些属性可能只计算一次。我喜欢访问这些属性的类的想法,以便能够访问属性与方法(因为它似乎更具可读性 IMO,将平均值视为属性而不是方法),但我可以看到这个可能会令人费解,尤其是在确保 _ave 正确设置为 null 时。
【问题讨论】:
-
应该快,不产生任何副作用,永远不要扔。
-
还要记住,对于某些操作(如上面显示的平均值),如果您使用 List
结构,它已经有一个扩展方法来为您提供此值。 -
@JayP 是的,我知道,我的代码涉及一个更复杂的属性,涉及更详细列表中某些对象的特定出现,但平均示例似乎足以简化问题而不会陷入困境不必要的细节。
标签: c# coding-style conventions