Модуль DNN C # dev - обнуляемое значение - PullRequest
2 голосов
/ 30 января 2012

Я разрабатываю модуль dnn и использую открытый класс classNameInfo: IHydratable (c #)

Может кто-нибудь объяснить , почему этот код всегда возвращает 0 из БД :

System.Nullable<int> _ProductID;
_ProductID = (oReader["ProductID"] == System.DBNull.Value ? null : (int?)oReader["ProductID"]);

пока этот код возвращает правильное значение?

int? y = (oReader["ProductID"] == System.DBNull.Value ? null : (int?)oReader["ProductID"]);
if (y != null)
{
_ProductID = (int)oReader["ProductID"];
}
else
{
_ProductID = 0;
} 

1 Ответ

3 голосов
/ 30 января 2012

Если вы попытаетесь преобразовать anything в int?, он будет работать только в том случае, если тип указанного anything равен точно int. Любое другое прямое преобразование потерпит неудачу. Поскольку типы баз данных никогда не бывают «точно int», это преобразование не может работать.

Чтобы сделать код короче, вы можете использовать следующее утверждение:

_ProductID = oReader["ProductID"] == System.DBNull.Value ? new int?() : (int)oReader["ProductID"];
...