操作员 '??'不能应用于“字符串”和“ system.dbnull”类型的操作数

StackOverflow https://stackoverflow.com/questions/4153009

  •  08-10-2019
  •  | 
  •  

我有以下C#代码:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);

但是它引发了以下汇编错误:

操作员 ?? 不能应用于类型的操作数 stringSystem.DBNull

为什么编译器不允许此语法?

有帮助吗?

解决方案

两个操作数都必须是对象。使用显式演员:

(object)table.Value ?? DBNull.Value;

其他提示

之间没有自动转换 stringSystem.DBNull 因此,您需要通过将铸件添加到 object:

sqlCommandObject.Parameters.AddWithValue("@Parameter",
                                         table.Value ?? (object)DBNull.Value);

这是因为之间没有隐含的转换 stringSystem.DBNull.

您可以使用convert.dbnull:而不是使用dbnull.value:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);

我相信在幕后,它基本上正在做与其他示例中提到的相同/相似的事情(即将dbnull铸造为对象),但它使其变得更简单/简单。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top