接线员’??’ 不能应用于’string’和’System.DBNull’类型的操作数
我有以下C#代码:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
但它会抛出以下编译错误:
操作员
??
不能应用于string
和System.DBNull
类型的操作数
为什么编译器不允许这种语法?
两个操作数都需要是对象。 使用显式转换:
(object)table.Value ?? DBNull.Value;
string
和System.DBNull
之间没有自动转换,因此您需要通过向object
添加System.DBNull
转换来明确指定所需的类型:
sqlCommandObject.Parameters.AddWithValue("@Parameter", table.Value ?? (object)DBNull.Value);
这是因为string
和System.DBNull
之间没有隐式转换。
您可以使用Convert.DBNull而不是使用DBNull.Value:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);
我相信在幕后它基本上做了与其他例子中提到的相同/类似的事情(即将DBNull转换为对象),但它使它更简单/更简单。