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

时间:2012-05-09 20:50:11

标签: c# casting dbnull explicit-conversion

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

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

这是我收到的错误消息:

  

无法隐式转换“十进制”类型?到'十进制'。一个明确的   存在转换(你错过了演员吗?)

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

4 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:12)

curPrice转换为可空,或使用可为空类型的.Value属性。

如果curPrice是某个类的属性,那么

public decimal? curPrice
{
   get;
   set;
}

答案 2 :(得分:4)

inrec.curPrice = sdr.GetValueOrDefault(0m)

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

答案 3 :(得分:3)

如何将decmial?类型转换为decimal

inrec.curPrice为空时,您必须拥有sdr.GetDecmial(7)所具有的值。

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

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

---重播后更新

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