DNN C#模块dev-可为null的值

本文关键字:null 的值 可为 dev- 模块 DNN | 更新日期: 2023-09-27 18:21:49

我开发了一个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;
} 

DNN C#模块dev-可为null的值

如果您尝试将anything转换为int?,则只有当所述anything的类型恰好为int时,它才会工作。其他所有直接转换都将失败。由于数据库类型从来都不是"完全int",所以这种转换是不起作用的。

要缩短代码,可以使用以下语句:

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