Не удается неявно преобразовать тип 'десятичное?'в 'десятичное число'.

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); ?