我正在编写一个 C# 例程来调用存储过程。在我传入的参数列表中,其中一个值可能合法地为空。所以我想我会使用这样的一行:
cmd.Parameters.Add(new SqlParameter("@theParam", theParam ?? DBNull.Value));
不幸的是,这会返回以下错误:
CS0019:操作员 '??' 不能应用于“字符串”和“System.DBNull”类型的操作数
现在,这似乎很清楚,但我不明白其背后的原理。为什么这行不通?(通常,当我不明白为什么某事不工作时,并不是它不能工作……而是我做错了。)
我真的必须将其扩展为更长的 if-then 语句吗?
编辑:(顺便说一句,对于那些建议只使用“null”的人来说,它不起作用。我最初认为 null 也会自动翻译成 DBNull,但显然不会。(谁知道?))