可能重复:
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时,编译器是否停止并运行代码或检查到底是什么接下来呢? 它会在第二种情况下这样做。
答案 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)
是。
双管或“||”如果某些条件为真,它将从左到右看,是否会停止查找其他条件并执行该段代码。简单的管道或“|”会做同样的事情,但会检查所有条件(所以通常你会更喜欢使用“||”)。