2012-05-09 6 views
6

sdrがsqldatareaderで、decimal型のcurPrice値がnullであることを確認したいと思います。暗黙のうちに 'decimal?'型を変換できません。 「小数点以下へ」。

inrec.curPrice = sdr.IsDBNull(7) ? (decimal?)null : sdr.GetDecimal(7);

これは私が取得していますエラーメッセージです:

私は間違っているつもりです

Cannot implicitly convert type 'decimal?' to 'decimal'. An explicit conversion exists (are you missing a cast?)

を、誰かが私に教えてください。

答えて

10

curPriceをnullableに変換するか、nullable型の.Valueプロパティを使用します。

curPriceの場合は、decimaldecmial?タイプの変換について

public decimal? curPrice 
{ 
    get; 
    set; 
} 
19

decimal?は、nullable小数であることを示します。実際の値を取得するにはValueプロパティを使用する必要があります(存在する場合はHasValueで決定)。

curPriceはヌル値ではない10進数であると仮定しています。この場合、3進演算子の真の側からnullよりも良い値を返す必要があります。

+3

私は混乱しています。申し訳ありませんが、これは私にとって非常に新しいものです。 – user1270384

3

どのようにクラスのプロパティですか?

inrec.curPriceには、sdr.GetDecmial(7)がnullの場合の値が必要です。

inrec.curPrice = sdr.GetDecimal(7) ?? 0M; 

戻り値がnullの場合は0を使用するとします。変更しない場合は、0Mを他の10進数値に変更してください。

---リプレイ後の更新

いかがinrec.curPrice = sdr.IsDBNull(7) ? 0M : sdr.GetDecimal(7);nullはその後、あなたはnull可能性が何かに​​その値を設定することはできませんのために左側(Price)が許可されていませんので

+0

私はこのエラーを受け取ります:エラー\t 7オペレータ '??' 'decimal'と 'decimal'のオペランドには適用できません – user1270384

+0

ああ私はMDSNで '.GetDecimal()'を検索しましたが、 'decimal'ではなく' decimal? 'を返します。申し訳ありません。 –

4
inrec.curPrice = sdr.GetValueOrDefault(0m) 

。したがって、nullの場合は、.GetValueOrDefault(decimal defaultValue)を使用してデフォルト値を返します。

関連する問題