sdr是我的sqldatareader,我想检查一个十进制类型的curPrice值是否为null。
inrec.curPrice = sdr.IsDBNull(7) ? (decimal?)null : sdr.GetDecimal(7);
这是我收到的错误消息:
无法隐式转换“十进制”类型?到'十进制'。一个明确的 存在转换(你错过了演员吗?)
我哪里出错了,请有人告诉我。
答案 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);
怎么样?