我有一个 SQL Reader 对象,我对其进行迭代,而且通常情况下,你永远不知道你会得到什么。读者返回的任何值都需要转换为双精度值,但如果它返回 null,我需要用默认值优雅地处理它,在这种情况下为零。我开始使用与此类似的代码...
double x;
if (reader[1] is double)
x = (double)reader[1];
else
x = 0;
...这似乎可以解决问题,但我并不满意。我认为设计 C# 的神秘团队会为此配备一个运算符,你知道吗,有. 所以,然后我最终得到了一个稍微不同的实现......
var x = reader[1] as Double? ?? 0;
我无法告诉您上面的两个示例是否等效,因为像所有新手一样,我采用了我认为可以解决问题并将其用于重要事情的代码——部分笑话。我所知道的是,我还没有让任何一种实现在访问数据库并获得空结果时抛出异常,这让我相信两者都能按我的预期工作,但我宁愿确定。
所以,关于我的问题。有人可以解释一下我在使用这两种方法时可能遇到的潜在功能差异吗?如果可能,有人可以提供/解释第二个示例的更好实现吗?我发现 null-coalesce 运算符非常性感,但我真的不知道我是否以最好的方式实现它。谢谢。