これはあなたがdecimal?
3進演算子で10進数にnullを割り当てることができないのはなぜですか?
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? (decimal?)decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: null;
これはあなたがdecimal?
3進演算子で10進数にnullを割り当てることができないのはなぜですか?
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? (decimal?)decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: null;
にキャストすることができますし、型指定されたオブジェクトに割り当てる必要があります。
これは動作するはずです:
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: (decimal?)null;
か、これは少し優れている:ここでは
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: default(decimal?);
はdefaultキーワードのMSDNのリンクです。
ありがとうございました。 –
fanbloodytastic! – northpole
最高のレスポンスは答えているだけではなく、情報を伝えて教育するものです。素敵なスラブスター –
はこれを試してみてください動作しませんなぜ私が理解することはできません。
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text) ?
decimal.Parse(txtLineCompRetAmt.Text.Replace(",", "")) :
(decimal?) null;
問題は、コンパイラはどのタイプがnull
を持っているのか分からないということです。だから、null
は(事実上型なし)タイプobject
であるので、あなただけのdecimal?
それは違いはありません。 'decimal'は' decimal? 'に入れることができます。 –
"三項演算子の出力タイプは最初のパートのタイプです":これは真ではありません...第1パートと第2パートのどちらのタイプでもかまいません。その間の変換に応じて –
'decimal'から' decimal? 'に変換します。 – slugster
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text) ?
decimal.Parse(txtLineCompRetAmt.Text.Replace(",","")) :
(decimal?)null;
に最初の部分をキャストする必要が
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: null;
コンパイラは、条件演算子のオペランドから最適な型を推論できないためです。あなたがcondition ? a : b
を書くとき
は、b
のタイプに、またはb
のタイプからa
の種類にa
のタイプから暗黙の変換が存在する必要があります。コンパイラは、式全体の型をこの変換のターゲット型として推論します。タイプdecimal?
の変数に代入するということは、決してコンパイラによって考慮されません。あなたのケースでは、a
とb
のタイプはdecimal
であり、未知の参照またはヌル入力可能なタイプです。コンパイラは、あなたが何を意味するかを推測することはできませんので、あなたはそれを支援する必要があります。
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: default(decimal?);
decimal.Parse
を使用しないでください。
Convert.ToDecimal
は、null文字列が指定されている場合は0を返します。 decimal.Parse
は、解析する文字列がnullの場合にArgumentNullExceptionをスローします。
読者は気にしませんが、何が問題なのですか? –
条件演算子と呼ばれていますが、明確ですが、三項演算子 –
@JakubKoneckiではありません。できるだけ多くの情報を提供することは常に良いことです。この場合、コンパイルエラー –