Нулевой оператор слияния на десятичной и десятичной

Я сталкиваюсь со следующей ошибкой при применении нулевого оператора слияния.

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

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

Следующая ошибка возвращается:

Оператор '??' нельзя применять к операндам типа "десятичный" и "десятичный"

Почему это не работает? Нулевой оператор объединения не работает с десятичными числами или я что-то здесь упускаю? Я знаю, как обойти это без использования оператора, но это несколько сбило меня с толку, так что мне интересно, знаете ли вы правильный ответ на этот вопрос?

Спасибо!

2 ответа

Решение

Вы получаете эту ошибку, потому что decimal это тип значения, а не обнуляемый тип значения (например, decimal?) или ссылочный тип.

Из MSDN:

... и используется для определения значения по умолчанию для типов значений NULL или ссылочных типов

Значение по умолчанию для переменной типа decimal ноль, поэтому я не совсем уверен, почему вы хотите использовать этот оператор в этом сценарии.

Кроме того, переменная заднего поля (_currentImpulseId) не требуется с.NET 3.0, так как введение автоматически реализуемых свойств означает, что вы можете просто написать

public decimal CurrentImpulseId { get; set; }

Поскольку десятичная дробь является типом значения, смотрите ЗДЕСЬ, вы должны сделать его обнуляемым. Пытаться

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

public decimal? CurrentImpulseId
{
  get { return _currentImpulseId ?? 0M; }
  set { _currentImpulseId = value; }
}
Другие вопросы по тегам