c#布尔运算符 – 正常与短路

关于BOOLEAN运算符’|’的问题 和’||’。 我可以在这两个运营商之间找到的唯一区别是; 当使用’||’时 如果左侧为真,则不会评估表达式的右侧。

在人的偏好之外为什么会使用’|’ 在’||’ 用于布尔测试?

if(true | false) { do something } vs if (true || false) { do something } 

如果操作有副作用,这主要是一个问题:

考虑以下:

 using(IEnumerator iterator1 = args.GetEnumerator()) using (IEnumerator iterator2 = args.GetEnumerator()) { while (iterator1.MoveNext() | iterator2.MoveNext()) { //do stuff } } 

因为MoveNext操作会产生副作用,所以对于|两侧都很重要 无论第一个是否为真,都要执行。

为什么会使用’|’ 在’||’ 用于布尔测试?

如果(由于某种原因)右侧有副作用,您需要发生。

然而,这通常不是好的做法。

在人的偏好之外为什么会使用’|’ 在’||’ 用于布尔测试?

正因为您可能希望对双方进行评估。 您可能需要以任何一种方式发生副作用。

这很罕见,但它是可行的。