13

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

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

这是我收到的错误消息:

不能隐式转换类型“十进制?” 为“十进制”。存在显式转换(您是否缺少演员表?)

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

4

4 回答 4

28

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

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

于 2012-05-09T20:52:20.327 回答
13

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

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

public decimal? curPrice
{
   get;
   set;
}
于 2012-05-09T21:00:11.730 回答
6
inrec.curPrice = sdr.GetValueOrDefault(0m)

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

于 2016-09-29T18:58:05.070 回答
4

如何将decmial?类型转换为decimal

inrec.curPricesdr.GetDecmial(7)为空 时,您必须拥有您喜欢的价值。

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

我假设如果返回的内容为空,您会想要使用 0。如果不更改0M为其他十进制值。

--- 重播后更新

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

于 2012-05-09T21:02:19.237 回答