我正在重构我们的一些项目,以便与我们的客户之一重新使用,我希望能够理智地检查重写其中一个属性设置者的决定。此属性设置器中的条件是否有效?
我已经看到了这在执行我们的代码库几次,但因为它是由一个开发谁不再在这里工作,我不能问他这件事。
它去如下:
private double _myProperty;
public double MyProperty
{
get { return _myProperty; }
set
{
if (!(Math.Abs(_myProperty - value) < double.Epsilon))
{
_myProperty = value;
OnPropertyChanged();
}
}
}
我很熟悉,写属性setter的语法如下:如果我丢失
if (value != _myProperty)
但在上面第一个例子我一直想知道一些东西。我知道Math.Abs计算给了我'价值'和'_myProperty'的当前值之间的差异,但为什么与double.Epsilon进行比较呢?根据IntelliSense和MSDN,double.Epsilon“代表大于零的最小正双倍值”。所以肯定是比较可以很容易为:
if (Math.Abs(_myProperty - value) > 0)
是以前开发商只是被不必要地复杂化,还是我失去了C#的一些小的细微差别我还没有介绍吗?
谢谢,我会更新它为Epsilon使用更合适的值 – Dmihawk