0

可能重复:
是否会执行逻辑表达式中的所有方法?

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

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

4 回答 4

6

||是短路,这意味着:如果第一个参数返回true,第二个参数不被计算。这样,的,它大致等同于您的第二个示例,但更简洁。

于 2012-09-21T12:22:20.863 回答
1

|| 的 MSDN 文档 C#中的运算符

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

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

于 2012-09-21T12:23:07.220 回答
1

在操作x || y中,y仅当x为假时才评估。

于 2012-09-21T12:23:56.210 回答
0

是的。

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

于 2012-09-21T12:24:06.603 回答