8

关于布尔运算符'|'的问题 和'||'。我能发现这两个运算符之间的唯一区别是;使用“||”时 如果左侧为真,则不会计算表达式的右侧。

在个人偏好之外,为什么要使用“|” 在'||' 用于布尔测试?

if(true | false)
{
do something
}

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

3 回答 3

17

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

考虑以下:

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

因为MoveNext操作会导致副作用,所以无论第一个是否为真,执行的双方都可能很重要。|

于 2013-01-14T19:38:06.243 回答
4

为什么要使用'|' 在'||' 用于布尔测试?

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

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

于 2013-01-14T19:36:49.550 回答
3

在个人偏好之外,为什么要使用“|” 在'||' 用于布尔测试?

正是因为您可能希望双方都被评估。无论哪种方式,您都可能需要发生副作用。

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

于 2013-01-14T19:35:48.160 回答