无法将类型“十进制”隐式转换为“十进制”

本文关键字:十进制 转换 类型 | 更新日期: 2023-09-27 18:33:36

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

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

这是我收到的错误消息:

无法将类型"十进制"隐式转换为"十进制"。一个明确的 转换存在(您是否缺少演员表?

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

无法将类型“十进制”隐式转换为“十进制”

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

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

要么

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

如果curPrice是类的属性,则

public decimal? curPrice
{
   get;
   set;
}
inrec.curPrice = sdr.GetValueOrDefault(0m)

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

如何将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);怎么样?