我有一个while循环,循环条件是这样的:
while (i != repetitionString.Length || !repetitionString[i].Equals(')'))
条件的第一部分检查是否未到达集合的结尾。在不满足左侧条件后,是否可以不执行||
之后的部分?这背后的原因是如果不满足左侧的条件,那么这意味着集合超出界限,因此右侧的评估/检查将抛出异常。
是否可以这样做?
答案 0 :(得分:4)
你只需使用&&而不是||。因为只有在第一个条件返回true时才应检查正确的条件。
答案 1 :(得分:2)
无论如何都会发生这种情况 - 如果左边的布尔条件的计算结果为false,则只会执行右边的布尔条件。您可以使用二进制逻辑(单|
)强制执行正确的,但这不是您想要做的,因此您当前的语句将执行得很好。
看起来你真正想要的是:
while (i < repetitionString.Length && repetitionString[i]!=")")
{
}
答案 2 :(得分:0)
短路已经发生。
我的猜测是repetitionString
是从零开始的索引,而.Length
则返回总计数。因此,您需要修改if
以保持边界:
while (i != (repetitionString.Length - 1) || !repetitionString[i].Equals(')'))
答案 3 :(得分:0)
这看起来相当于:
if (attribute != null || attribute.value != null)
因为你无法使用
if (attribute.value != null)
因为这会在属性== null时引发错误,所以我认为你的代码是正确的?
当条件
i != repetitionString.Length
满足,代码将跳过||
之后的部分因为它是一个OR表达式,所以当条件的第一部分返回true时,不需要检查条件的第二部分。
当你使用&amp;&amp;而不是||,将始终检查两个条件。这不是你想要做的。