c#布尔运算符——普通与短路

本文关键字:短路 运算符 布尔 | 更新日期: 2023-09-27 17:52:54

关于布尔运算符'|'和'||'的问题。我能找到的这两个算子的唯一区别是;当使用'||'时,如果表达式左边为真,则不计算表达式右边的值。

在个人偏好之外,为什么要使用'|'而不是'||'进行布尔测试?

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

c#布尔运算符——普通与短路

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

考虑以下内容:

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

因为MoveNext操作会产生副作用,所以对于|两边都执行可能很重要,而不管第一个操作是否为真。

为什么要用'|'而不是'||'来进行布尔测试?

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

在个人偏好之外,为什么要使用'|'而不是'||'进行布尔测试?

正是因为可能希望两边都求值。这两种方法都可能产生副作用。