无法隐式转换类型'decimal?' 到'十进制'.

use*_*384 9 c# dbnull casting explicit-conversion

sdr是我的sqldatareader,我想检查一个十进制类型的curPrice值是否为null.

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

这是我收到的错误消息:

无法隐式转换类型'decimal?' 到'十进制'.存在显式转换(您是否错过了演员?)

哪里出错了,请有人告诉我.

rav*_*uya 24

decimal?表示它是可以为空的小数; 你必须使用该Value属性来获取实际值(如果它存在,通过确定HasValue).

我假设curPrice是一个不可为空的小数,在这种情况下你需要找出一个更好的值来返回,而不是null从你的三元运算符的真实方面.

  • 我糊涂了.您是否碰巧有代码示例来解释您的意思..很抱歉这对我来说很新鲜. (4认同)

Kis*_*mar 12

要么转换curPrice为nullable,要么使用可空类型的.Value属性.

如果curPrice是一个类的属性那么

public decimal? curPrice
{
   get;
   set;
}
Run Code Online (Sandbox Code Playgroud)


Laz*_*Dog 5

inrec.curPrice = sdr.GetValueOrDefault(0m)
Run Code Online (Sandbox Code Playgroud)

由于左侧(Price)不允许,null因此您无法将其值设置为可能的值null。因此,.GetValueOrDefault(decimal defaultValue)当时使用来返回默认值null