【发布时间】:2011-03-27 13:34:22
【问题描述】:
三元运算符似乎存在一些类型混淆。我知道这已在其他 SO 线程中得到解决,但它始终与可空值有关。另外,就我而言,我真的只是在寻找更好的方法。
我希望能够使用
proc.Parameters[PARAM_ID].Value =
string.IsNullOrEmpty(dest.Id) ? DBNull.Value : dest.Id;
但相反,我坚持这样做:
if (string.IsNullOrEmpty(dest.Id))
{
proc.Parameters[PARAM_ID].Value = DBNull.Value;
}
else
{
proc.Parameters[PARAM_ID].Value = dest.Id;
}
三元运算符失败是因为 DBNull 和字符串之间不可能进行转换,而且考虑到 Value 是对象,这似乎很愚蠢,编译器将它踢回给我,我不得不关心。这个问题的可空版本的答案是将 null 转换为字符串并完成它;但是,DBNull 不能转换为字符串,所以没有运气。
有没有更简洁的方法来做到这一点(顺便说一句,不使用可空值?)
谢谢!
【问题讨论】:
标签: c# ado.net ternary-operator dbnull