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

时间:2013-01-14 19:34:11

标签: c#

关于BOOLEAN运算符'|'的问题和'||'。我可以在这两个运营商之间找到的唯一区别是;使用'||'时the right side of the expression will not be evaluated if the left side is true.

除了人的偏好,为什么会使用'|'超过'||'用于布尔测试?

if(true | false)
{
do something
}

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

3 个答案:

答案 0 :(得分:17)

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

请考虑以下事项:

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

由于MoveNext操作会导致副作用,因此无论第一个是否为真, {/ 1>}的都可能很重要。

答案 1 :(得分:4)

  

为什么会使用'|'超过'||'用于布尔测试?

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

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

答案 2 :(得分:3)

  

除了人的偏好,为什么会使用'|'超过'||'用于布尔测试?

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

这种情况很少见,但这是可行的。