我在应用空合并运算符时遇到以下错误。
private decimal _currentImpulseId;
// ... later on used in public property getter as follows
public decimal CurrentImpulseId
{
get { return _currentImpulseId ?? 0M; }
set { _currentImpulseId = value; }
}
返回以下错误:
运营商'??'不能应用于'decimal'类型的操作数 '小数'
为什么这不起作用? null合并运算符是否不适用于小数或我在这里遗漏了什么?我知道如何在不使用操作员的情况下解决这个问题,但这有点困扰我,所以我想知道你是否知道这个问题的正确答案?
谢谢!
答案 0 :(得分:5)
您收到此错误是因为decimal
是值类型,而不是可为空的值类型(例如decimal?
)或引用类型。
来自MSDN:
...并用于为可空值类型或引用类型定义默认值
decimal
类型变量的默认值为零,所以我不太清楚为什么要在这种情况下使用此运算符。
此外,从.NET 3.0开始,不需要支持字段变量(_currentImpulseId
),因为引入auto-implemented properties意味着您可以编写
public decimal CurrentImpulseId { get; set; }
答案 1 :(得分:2)
因为decimal是值类型,请参阅HERE,您必须使其可为空。 试试
private decimal? _currentImpulseId;
// ... later on used in public property getter as follows
public decimal? CurrentImpulseId
{
get { return _currentImpulseId ?? 0M; }
set { _currentImpulseId = value; }
}