Не удается неявно преобразовать тип 'десятичное?'в 'десятичное число'.
sdr-мой sqldatareader, и я хочу проверить, что значение curPrice, которое имеет тип decimal, равно null.
inrec.curPrice = sdr.IsDBNull(7) ? (decimal?)null : sdr.GetDecimal(7);
это сообщение об ошибке я получаю:
Не может неявно преобразовать тип ' decimal?'в 'десятичное число'. Явное указание преобразование существует (вам не хватает приведения?)
где я ошибаюсь, пожалуйста, кто-нибудь скажите мне.
4 ответов
либо преобразовать curPrice
для nullable или использования .Value свойство nullable типов.
Если curPrice
является свойством класса then
public decimal? curPrice
{
get;
set;
}
decimal?
указывает, что это тип nullable decimal; вы должны использовать Value
свойство для получения фактического значения (если оно существует, определяется через HasValue
).
Я предполагаю, что curPrice
является ненулевым десятичным числом, в этом случае вам также нужно выяснить лучшее значение для возврата, чем null
С истинной стороны вашего тернарного оператора.
inrec.curPrice = sdr.GetValueOrDefault(0m)
С левой стороны (Price
) не позволяет null
тогда вы не можете установить его значение на то, что может быть null
. Таким образом, использование .GetValueOrDefault(decimal defaultValue)
чтобы вернуть значение по умолчанию, когда null
.
как насчет преобразования decmial?
тип decimal
?
вы должны иметь то, что вам нравится inrec.curPrice
, когда sdr.GetDecmial(7)
равно null.
inrec.curPrice = sdr.GetDecimal(7) ?? 0M;
я предположил, что вы захотите использовать 0, если возвращаемое значение равно null. Если не изменить 0M
к некоторому другому десятичному значению.
--- обновление после преобразования
как о inrec.curPrice = sdr.IsDBNull(7) ? 0M : sdr.GetDecimal(7);
?