接线员’??’ 不能应用于’string’和’System.DBNull’类型的操作数

我有以下C#代码:

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

但它会抛出以下编译错误:

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

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

两个操作数都需要是对象。 使用显式转换:

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

stringSystem.DBNull之间没有自动转换,因此您需要通过向object添加System.DBNull转换来明确指定所需的类型:

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

这是因为stringSystem.DBNull之间没有隐式转换。

您可以使用Convert.DBNull而不是使用DBNull.Value:

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

我相信在幕后它基本上做了与其他例子中提到的相同/类似的事情(即将DBNull转换为对象),但它使它更简单/更简单。