小数和小数上的空合并运算符

时间:2012-08-22 11:55:00

标签: c# null operator-keyword coalescing

我在应用空合并运算符时遇到以下错误。

private decimal _currentImpulseId;
// ... later on used in public property getter as follows

public decimal CurrentImpulseId
{
  get { return _currentImpulseId ?? 0M; }
  set { _currentImpulseId = value; }
}

返回以下错误:

  

运营商'??'不能应用于'decimal'类型的操作数   '小数'

为什么这不起作用? null合并运算符是否不适用于小数或我在这里遗漏了什么?我知道如何在不使用操作员的情况下解决这个问题,但这有点困扰我,所以我想知道你是否知道这个问题的正确答案?

谢谢!

2 个答案:

答案 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; }
}