Нулевой оператор слияния на десятичной и десятичной
Я сталкиваюсь со следующей ошибкой при применении нулевого оператора слияния.
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; }
}