c# - DBNull的简洁用法? (三元?)

标签 c# ado.net ternary-operator dbnull

似乎在三元运算符中存在某种类型混淆。我知道这已在其他 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 不能转换为字符串,所以运气不好。

有没有更简洁的方法来做到这一点(顺便说一下,不使用可空值?)

谢谢!

最佳答案

您可以将您的第一条语句更改为:

proc.Parameters[PARAM_ID].Value = 
    string.IsNullOrEmpty(dest.Id) ? (object)DBNull.Value : dest.Id;

关于c# - DBNull的简洁用法? (三元?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444795/

相关文章:

c# - 在 uml 中表示 C# 自动实现的属性

c# - TPL 数据流 : Bounded capacity and waiting for completion

c# - 由于缺少 Azure 存储连接字符串和 SAS 连接 uri,Blob 存储的 secret 初始化失败

c# - 加载数据源时应用程序窗口挂起

c# - 三元运算符用法

php - 这个语法是什么 ( page = $page ? $page : 'default' ) in PHP mean?

c# - 用于中等长度任务的 WCF 集群

c# - 请向 vb-er 解释 C# 语法

.net - 序列化 .Net SqlTransaction?