无法隐式转换类型’decimal?’ 到’十进制’。

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

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

这是我收到的错误消息:

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

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

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

如果curPrice是类的属性那么

 public decimal? curPrice { get; set; } 

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

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

 inrec.curPrice = sdr.GetValueOrDefault(0m) 

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

如何转换decmial? 输入到decimal

sdr.GetDecmial(7)为null时,你必须拥有sdr.GetDecmial(7)值。

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

我假设如果返回的是null,你会想要使用0。 如果不将0M更改为其他十进制值。

—重播后更新

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