C# - OR是否像其他一样?

时间:2012-09-21 12:19:59

标签: c#

  

可能重复:
  Will all methods in a logical expressions be executed?

让我解释一下:假设我们有两个代码:

foreach(Object o in Objs)
    if(o is Class1 || o is Class2)
        DoSomething();

__

foreach(Object o in Objs)
    if(o is Class1)
        DoSomething();
    else if(o is Class2)
        DoSomething();

现在,当然OR在这种情况下更好,但我的问题是不同的,只是出于好奇:当在第一种情况下o类型为Class1时,编译器是否停止并运行代码或检查到底是什么接下来呢? 它会在第二种情况下这样做。

4 个答案:

答案 0 :(得分:6)

||是短路的,这意味着:如果第一个参数返回true,则第二个参数未评估。通过这种方式,它大致相当于你的第二个例子,但更简洁。

答案 1 :(得分:1)

MSDN Documentation for the || operator in C#

  

条件OR运算符(||)执行其bool操作数的逻辑或。如果第一个操作数的计算结果为true,则不计算第二个操作数。如果第一个操作数的计算结果为false,则第二个操作符将确定整个OR表达式的计算结果为true或false。

注意:我所知道的所有类C语言(C,C ++,Java,C#)的情况也是如此。

答案 2 :(得分:1)

x || y操作中,y仅在x为假时进行评估。

答案 3 :(得分:0)

是。

双管或“||”如果某些条件为真,它将从左到右看,是否会停止查找其他条件并执行该段代码。简单的管道或“|”会做同样的事情,但会检查所有条件(所以通常你会更喜欢使用“||”)。