3

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

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

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

返回以下错误:

操作员 '??' 不能应用于“十进制”和“十进制”类型的操作数

为什么这不起作用?空合并运算符是否不适用于小数,或者我在这里遗漏了什么?我知道如何在不使用运算符的情况下解决此问题,但这让我有些困惑,所以我想知道您是否知道正确答案?

谢谢!

4

2 回答 2

6

您收到此错误是因为decimal它是值类型,而不是可为空的值类型(例如decimal?)或引用类型。

来自MSDN

...并且用于为可空值类型或引用类型定义默认值

类型变量的默认值decimal为零,所以我不太清楚为什么要在这种情况下使用此运算符。

_currentImpulseId此外,从.NET 3.0 开始,不需要支持字段变量 ( ),因为引入了自动实现的属性意味着您可以编写

public decimal CurrentImpulseId { get; set; }
于 2012-08-22T11:56:00.073 回答
3

因为 decimal 是一种值类型,请参见HERE,您必须使其可为空。尝试

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

public decimal? CurrentImpulseId
{
  get { return _currentImpulseId ?? 0M; }
  set { _currentImpulseId = value; }
}
于 2012-08-22T11:59:54.900 回答