多个条件语句的AND / OR(&& / ||)逻辑

时间:2013-12-19 11:47:09

标签: c# logic conditional statements

如果在C#中有if语句,则检查多个条件:

if (a == 5 && b == 9) { ... }

如果 a == 5 条件为false,是否仍会检查 b == 9 ,还是会自动退出,因为这种情况不再可以通过了?

同样,对于OR if语句:

if (a == 5 || b == 9) { ... }

如果 a == 5 为真, b == 9 是否会被检查?

6 个答案:

答案 0 :(得分:16)

&&||都是“短路”运算符,这意味着如果从左操作数中得知答案,则不会对右操作数进行求值。

这意味着:

a && b
如果b为false,则不会评估

a,因为最终答案已知。

同样地:

a || b
如果b为真,则不会评估

a,因为最终答案已知。

如果想要要评估两个操作数,请改用&|运算符。

这样做的好处是,如果评估了所有操作数,您可以编写失败的表达式。这是一个典型的if语句:

if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
    ... use a.SomeProperty.Inner

如果a为null,并且表达式将继续评估a.SomeProperty,则会抛出NullReferenceException,但由于&&短路,如果anull,表达式不会评估其余的,因此不会抛出异常。

显然,如果您将&&替换为&,如果aa.SomePropertynull,则会抛出该异常。

答案 1 :(得分:2)

从概念上讲,&&||短路。

但是由于你没有任何副作用,JIT编译器可以自由地消除短路。我不知道它是否确实如此。

答案 2 :(得分:1)

对于: if (a == 5 && b == 9) { ... }

  

如果== 5条件为假,b == 9仍然会被检查,或者是否   自动退出,因为这不能再通过了吗?

如果a == 5false,则该行不会执行任何其他控件。

对于: if (a == 5 || b == 9) { ... }

  

如果== 5为真,b == 9仍会被检查吗?

立即进入内部,因为第一个条件已满足要求。

答案 3 :(得分:0)

使用AND运算符,根据布尔逻辑,所有条件必须计算为TRUE。如果只满足其中一个,则条件的结果将为FALSE。

  

如果== 5条件为假,b == 9仍然会被检查,或者是否   自动退出,因为这种情况再也无法通过了吗?

它会自动退出,因为第一个条件为false且结果已知。

对于OR运算符,您至少需要其中一个条件为TRUE并且您的逻辑将被执行。如果第一个不满意,应用程序将检查其他条件。

  

如果== 5为真,b == 9仍会被检查吗?

不,不会检查,因为第一个条件为TRUE,然后没有必要检查另一个条件。

答案 4 :(得分:0)

短标准是由标准定义的。否则就无法说出表达的结果如何:

if (a != null && a.IsValid) { ... }

在某些C#编译器中它可以正常工作,在其他一些编译器中它会导致异常。这就是为什么标准可以定义共同行为的原因。

编辑:澄清了最后的陈述。

答案 5 :(得分:-1)

在AND检查 a==5 如果是真的那么    将转到b==9其他地方    不会转到b==9。 在OR中: 它会检查a==5b==9