C# 使用C中的对象变量将AddWithValue中的null转换为DBNull#

C# 使用C中的对象变量将AddWithValue中的null转换为DBNull#,c#,sql-server,null,optional-parameters,dbnull,C#,Sql Server,Null,Optional Parameters,Dbnull,我试图将要转换为DBNull(如果是null)的C#方法的可选参数与parameter.AddWithValue方法一起添加 我看到了许多解决方案()、扩展方法等,但我想要一个单行解决方案 command.Parameters.AddWithValue(“@Municipio”,Municipio??DBNull.Value)不起作用(运算符“??”不能应用于“string”和“System.DBNull”类型的操作数) 方法:publicstaticvoidfoo(stringbar,stri

我试图将要转换为
DBNull
(如果是
null
)的C#方法的可选参数与parameter.AddWithValue方法一起添加

我看到了许多解决方案()、扩展方法等,但我想要一个单行解决方案

command.Parameters.AddWithValue(“@Municipio”,Municipio??DBNull.Value)
不起作用(运算符“??”不能应用于“string”和“System.DBNull”类型的操作数)

方法:
publicstaticvoidfoo(stringbar,stringmunicipio=null)

不幸的是,我不能执行
string municipio=DBNull.Value
,因为“默认参数必须是编译时常量”(我不完全理解其含义)

我能够使它这样工作:

objectobj=municipio==null?command.Parameters.AddWithValue(“@Municipio”,DBNull.Value):command.Parameters.AddWithValue(“@Municipio”,Municipio)

我对此感到非常不舒服,这似乎是一种JavaScript方式,我希望这样:

如果市政==null?command.Parameters.AddWithValue(“@Municipio”,DBNull.Value):command.Parameters.AddWithValue(“@Municipio”,Municipio)

但不知何故,我无法使它像这样工作,也许我缺少一些语法(我尝试了许多括号/etc组合)


所以我的问题是,这是我得到的一行解决方案的良好实践,还是我应该替换它?

更新以处理未初始化的变量。 以下是一个例子:

            OracleParameter P_COUNTYCODE = new OracleParameter("P_COUNTYCODE", OracleDbType.Varchar2);
            P_COUNTYCODE.Direction = ParameterDirection.Input;
            P_COUNTYCODE.Value = countyCode.Length > 0 ? countyCode : (object)DBNull.Value;
尝试:


另一个选项是
command.Parameters.AddWithValue(“@Municipio”,Municipio??DBNull.Value)
我已经尝试过了,但是
运算符“??”不能应用于“string”和“System.DBNull”类型的操作数。
对不起。应该是
command.Parameters.AddWithValue(“@Municipio”,Municipio???(object)DBNull.Value)
这种方式是有效的,但是看看这里(),这样我就可以更好地理解“相同”答案之间的差异。这不会检查值是否为null,这是问题特别要求的(查询空值的长度将引发NullReferenceException)这种方法是可行的,但我在这里等待答案()以更好地理解@stuartd did的观察结果。谢谢stuartd!如果没有设置变量,我已经更新了我的答案来处理。
command.Parameters.AddWithValue("@Municipio", !string.IsNullOrEmpty(municipio) > 0 ? municipio : (object)DBNull.Value)