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

mig*_*lla 2 c# logic conditional statements

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

if (a == 5 && b == 9) { ... }
Run Code Online (Sandbox Code Playgroud)

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

同样,对于OR if语句:

if (a == 5 || b == 9) { ... }
Run Code Online (Sandbox Code Playgroud)

b == 9仍然得到遏制,如果一个== 5是真的吗?

ang*_*son 18

这两个&&||是"短路"的运营商,这意味着如果答案是从左边的操作数已知,右操作数未评估.

这意味着:

a && b
Run Code Online (Sandbox Code Playgroud)

b如果a是假的,将不会被评估,因为最终答案已经知道.

同样:

a || b
Run Code Online (Sandbox Code Playgroud)

b如果a是真的,将不会被评估,因为最终答案已经知道.

如果评估两个操作数,请使用&|运算符.

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

if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
    ... use a.SomeProperty.Inner
Run Code Online (Sandbox Code Playgroud)

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

显然,如果替换&&&,则会抛出该异常,如果是a或者a.SomePropertynull.