应该使用方法更新属性值还是在getter中确定属性值?

时间:2019-05-11 14:30:46

标签: c# getter

只是一个简单的问题,以便了解在使用每次需要更改值的方法来更新属性的值还是在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方法的问题,就像第二个选项一样。那区别真的很重要吗?除此之外,是否有任何理由选择一个选项而不是另一个选项?

预先感谢

2 个答案:

答案 0 :(得分:1)

在第一种方法中读取 balance 时,您应该再次调用getter,在第二种方法中根本没有 balance ,我个人更喜欢 second方法,因为它会在调用时生成该值,因此您可以确保始终对其进行更新,并且无需调用函数然后读取该值即可,从而使其更干净,并且可维护

答案 1 :(得分:1)

要添加到Kiani的答案中,如果您不介意使用Linq,可以将代码转换为一个衬里。

private double Balance=>(!Payments.Any())?0:Payments.Sum(t=>t.Amount);