我已将类人属性生日定义为可为空的日期时间?,那么为什么 null 合并运算符不能在以下示例中工作?
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? DBNull.Value;
我得到的编译器错误是“运算符'??' 不能应用于“System.DateTime?”类型的操作数?和'System.DBNull'”
以下也有编译错误:
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
(person.Birthday == null) ? person.Birthday:DBNull.Value;
我按照 Refactor 的建议向 (object) 添加了一个强制转换,它编译了,但没有正常工作,并且在这两种情况下,值都作为 null 存储在 sqlserver db 中。
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? (object)DBNull.Value;
有人可以解释这里发生了什么吗?
我需要使用以下笨拙的代码:
if (person.Birthday == null)
cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value
= DBNull.Value;
else cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value =
person.Birthday;