我已经将类 Person 的属性 Birthday 定义为 nullable DateTime?,那么为什么在以下示例中,空值合并运算符不起作用呢?
我得到的编译器错误是“运算符'??'不能应用于类型为'System.DateTime?'和'System.DBNull'的操作数”。
以下内容也出现了编译错误:
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数据库中。
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;