只是一个简单的问题,以便了解在使用每次需要更改值的方法来更新属性的值还是在getter中进行操作之间是否存在更好的实践。
例如在此之间:
public double Balance { get; private set; }
private void UpdateBalance()
{
if (Payments.IsNullOrEmpty())
{
Balance = 0;
}
else
{
double amountSum = 0;
foreach (Payment payment in Payments)
{
amountSum += payment.Amount;
}
Balance = amountSum;
}
}
这:
public double OtherBalance
{
get
{
if (Payments.IsNullOrEmpty())
return 0;
double amountSum = 0;
foreach (Payment payment in Payments)
{
amountSum += payment.Amount;
}
return amountSum;
}
}
我能想到的唯一区别就是性能,因为在第一种情况下,每次我们尝试获取属性值时,getter都会遍历整个列表。但是,您不必担心每次执行可能会影响属性值的更改时都调用Update
方法的问题,就像第二个选项一样。那区别真的很重要吗?除此之外,是否有任何理由选择一个选项而不是另一个选项?
预先感谢
答案 0 :(得分:1)
在第一种方法中读取 balance 时,您应该再次调用getter,在第二种方法中根本没有 balance ,我个人更喜欢 second方法,因为它会在调用时生成该值,因此您可以确保始终对其进行更新,并且无需调用函数然后读取该值即可,从而使其更干净,并且可维护。
答案 1 :(得分:1)
要添加到Kiani的答案中,如果您不介意使用Linq,可以将代码转换为一个衬里。
private double Balance=>(!Payments.Any())?0:Payments.Sum(t=>t.Amount);