0

我刚刚阅读了这篇文章的最佳答案:
Problem inserting string or NULL into SQL Server database

如果我错了,请纠正我,但是 ?? 运算符不仅可以用于相同类型的两个变量,如果不是,我将不胜感激,如果有人能解决我的小问题。

我试图在我的项目中插入一些类似于下面的代码。

Dictionary<string, string> strings = new Dictionary<string, string>()
{
    {"@param0", strParam0},
    {"@param1", strParam1},
    {"@param2", strParam2}
};
foreach (string param in strings.Keys)
{
    cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value);
}

但 Visual Studio 抱怨以下消息:
“操作员 '??' 不能应用于‘string’和‘System.DBNull’类型的操作数”

4

3 回答 3

4

尝试:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
于 2009-02-27T10:09:43.153 回答
0

DBNull 和 Null 不是同一个类型,可空类型或引用类型和 DBNull 也不相同。你只能用??具有相同类型的值。

能想到的??运算符作为语法糖:

(left != null) ? left : right

并且三元运算要求左右都是同一类型,因此 ?? 运算符也必须属于同一类型。

所以,不幸的是,不......你不能这样做,至少不能没有一些丑陋的演员。

于 2009-02-27T10:08:45.357 回答
0
    cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);

唯一的缺点是它会查字典两次!

于 2009-02-27T10:18:51.523 回答