4

我有这样的财产:

private Decimal _payout; 
public Decimal PayoutValue
    {
        get { return _payout; }
        set
        {
            _payout = value;

            //second part of following conditional is an enum
            if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
            {
                _payout /= 100;
            }
        }
    }

如您所见,它取决于 的值PayoutType,这只是一个简单的枚举属性:

public CutType PayoutType { get; set; }

我的问题是在PayoutType设置之前似乎没有PayoutValue设置,所以下面的条件永远不会正确。如何在评估PayoutType之前强制设置?PayoutValue

谢谢。

更新感谢您的回答。我想我应该提到,大多数时候这个对象是通过 DataContexts 或从我的客户端(MVC 项目)的 Http.Post 绑定的,所以我真的没有任何构造函数。有没有其他方法,或者我应该开始在我的编程中发挥创意?

4

3 回答 3

2

如何在评估 PayoutValue 之前强制设置 PayoutType?

把它放在构造函数中。这是执行此规则的唯一方法。

话虽如此,我建议不要这样做,至少在您上面的实现中。您当前的属性实现会让用户非常非常困惑。人们倾向于期望设置一个属性,然后立即获取它会提供相同的值。

但是,在您的情况下:

decimal value = 45.3;
myObject.PayoutValue = value; // Set this

if (myObject.PayoutValue != value)
{
    // This would normally be a very unexpected case!  In your example, it will always be true!
}

潜在地使用两个属性或一个方法(即:)会更好地SetPayoutValue(decimal value)提示用户它不像一个简单的属性。

于 2010-10-06T17:34:04.380 回答
1

这个怎么样 ?

get
{
   if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
   {
      return _payout /100;
   }
   return _payout;
}
set{_payout = value;}

这样您就不会更改设置的值。

于 2010-10-06T17:51:14.417 回答
0

所有“必需”属性都应该在类的构造函数中。

于 2010-10-06T17:34:16.563 回答