我有这样的财产:
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绑定,所以我真的没有任何构造函数。还有其他方法,或者我应该开始对我的编程进行创作吗?
答案 0 :(得分: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)
)来提醒用户注意它不像一个简单的属性。
答案 1 :(得分:1)
这个怎么样?
get
{
if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
{
return _payout /100;
}
return _payout;
}
set{_payout = value;}
这样您就不会更改已设置的值。
答案 2 :(得分:0)
所有“必需”属性都应该在您的类的构造函数中。