Nullable<decimal>を返すゲッター/セッターWebControl
を実装するカスタムがあります.Value
これは、クライアント側でフィルタリングされたテキストボックスです(TextBox
JavaScriptが含まれているサブクラスと、値を設定/取得するためのサーバー側のロジックが含まれています)
これがそのコントロールのゲッターとセッターです。
public decimal? Value
{
get
{
decimal amount = 0;
if (!decimal.TryParse(this.Text, NumberStyles.Currency, null, out amount))
{
return null;
}
else
{
return amount;
}
}
set
{
if (!value.HasValue)
{
this.Text = "";
}
else
{
this.Text = string.Format("${0:#,##0.00}", value);
}
}
}
私が見ている問題は、このステートメントからの出力です。
decimal Amount = uxAmount.Value ?? 0M;
uxAmount.Value
10000を返すと、金額が「0」に設定されているのがわかります。
これは私が期待したように機能しました(ケーシングの変更を許してください):
decimal? _Amount = uxAmount.Value;
decimal amount = _Amount ?? 0;
また、Linq2Sqlデータコンテキストで定義されたUDF関数をnull合体演算子とともに呼び出すときにこの動作を(最近)見ました。つまり、UDF呼び出しが期待値を返すことはわかっていましたが、代わりにRHS値を取得していました。
さらに混乱しますが、時計でuxAmount.Valueを評価すると、タイプが10000になりNullable<decimal>
ます。
これが私が試したいくつかの表現です:
decimal? _Amount = uxAmount.Value; //10000
decimal amount = _Amount ?? 0; //10000
decimal amount2 = _Amount ?? 0M; //10000
decimal Amount = uxAmount.Value ?? 0M; //0
次に、上記の4に続いてこの式を追加しました
decimal amount3 = (uxTaxAmount.Value) ?? 0M;
今
decimal Amount = uxAmount.Value ?? 0M; //10000
decimal amount3 = (uxAmount.Value) ?? 0M; //0
最後の呼び出しは常に0のようですが、 ( aを使用して上記のgetter / setterのようuxAmount.Value
に解析されます。ブレークポイントで停止し、この値を操作できるスレッドは他にありません。.Text
TryParse
定数は整数であり、型変換の問題が疑われたため、定数を10進数にするためにM接尾辞を使用していることに注意してください。
何か案は?
LHSとRHSの両方の値は安定しており、既知であるように見えます。
--編集--VS2010からのいくつかのスクリーングラブ