それに依存している他の人の財産の価値を確保するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3875296

質問

私はそうするようなプロパティを持っています:

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またはクライアント側のhttp.post(MVCプロジェクト)からバインドされていることを言及すべきだったと思います。他に方法はありますか、それともプログラミングで創造的になり始めるべきですか?

役に立ちましたか?

解決

これはどう ?

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

設定された値を変更しないように。

他のヒント

PayoutTypeを評価する前に、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!
}

潜在的に2つのプロパティまたはメソッドを使用する方がはるかに良いでしょう(つまり、 SetPayoutValue(decimal value))ユーザーを単純なプロパティのように振る舞っていないという事実に合わせて。

すべての「必須」プロパティは、クラスのコンストラクターにある必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top