默认值设置为0的SqlParameter无法按预期工作

我做的是这样的:

SqlParameter param = new SqlParameter("@Param", 0) { SqlDbType = SqlDbType.Int }; private void TestParam(SqlParameter param) { string test = param.Value.ToString(); // Getting NullReferenceException here } 

但是,当我这样说时,我停止获取exception:

 SqlParameter param = new SqlParameter("@Param", SqlDbType.Int) { Value = 0 }; private void TestParam(SqlParameter param) { string test = param.Value.ToString(); // Everything OK } 

任何人都可以告诉我为什么SqlParameter假设0与null相同?

编辑: MSDN在此解释: SqlParameter构造函数

使用SqlParameter构造函数的此重载指定整数参数值时请小心。 因为此重载采用Object类型的值,所以必须在值为零时将整数值转换为Object类型,如下面的C#示例所示。

 Parameter = new SqlParameter("@pname", Convert.ToInt32(0)); 

如果不执行此转换,编译器会假定您尝试调用SqlParameter(string,SqlDbType)构造函数重载。

谢谢Msdn 🙂

传入的0是类型 ,而不是值。 任何枚举类型允许0个文字(和常量值) – 意味着底层枚举类型的0,并且是比对象更好的“匹配”,因为它不需要装箱。

就个人而言,我会用;

 Value = 0 

也许在对象初始化器中。