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ですか?

ありがとう。

更新回答ありがとうございます。ほとんどの場合、このオブジェクトは DataContext を介して、またはクライアント側 (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)単純なプロパティのように機能していないという事実をユーザーに理解させるために、2 つのプロパティまたはメソッド (つまり: ) を使用する可能性がある方がはるかに優れています。

于 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 に答える