【发布时间】:2010-10-24 15:07:07
【问题描述】:
我已经多次看到类似以下的内容......我讨厌它。这基本上是“欺骗”语言吗?或者..您是否认为这是“好的”,因为始终首先评估 IsNullOrEmpty?
(我们可以争论一个字符串从函数中出来时是否应该为 NULL,但这不是真正的问题。)
string someString;
someString = MagicFunction();
if (!string.IsNullOrEmpty(someString) && someString.Length > 3)
{
// normal string, do whatever
}
else
{
// On a NULL string, it drops to here, because first evaluation of IsNullOrEmpty fails
// However, the Length function, if used by itself, would throw an exception.
}
编辑: 再次感谢大家提醒我这个语言基础。虽然我知道它“为什么”起作用,但我不敢相信我不知道/不记得这个概念的名称。
(如果有人想要任何背景。我在解决由 NULL 字符串和 .Length > x 异常生成的异常时遇到了这个问题......在代码的不同位置。所以当我看到上面的代码时,除了其他一切,我的挫败感从那里接管了。)
【问题讨论】:
-
这些类型的运算符被称为“条件运算符”是有原因的 - 来自 MSDN:“条件与运算符 (&&) 对其布尔操作数执行逻辑与,但仅计算其第二个操作数如有必要。” msdn.microsoft.com/en-us/library/2a723cdk(VS.80).aspx
-
在 C++ 中,无法保证执行条件检查的顺序。在 C# 中是否有所不同?
-
也许这是 [facepalm] 分类徽章的机会:P
-
我真的不明白为什么这被否决了,因为这是一个合理的问题。有些人就是没有意识到这些事情,让他们该死的学习该死的精英!
-
这是他们努力为我们提供 Spec# 中看到的 NonNullable 合约的原因之一
标签: c# syntax short-circuiting