IF语句是否会在第一个条件失败时停止评估?

47 c# if-statement conditional-statements

如果我有一个If有两个条件的陈述 - 第一个失败了,第二个条件是否会被考虑,还是会直接进入else?那么,在下面的例子中,如果myList.Count == 0,将myString与"值"进行比较,还是直接进行else

if(myList.Count > 0 && myString.Equals("value"))
{
//Do something
}
else
{
//Do something else
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*gle 84

它将停止评估,因为您正在使用双&符号&&运算符.这称为短路.

如果您将其更改为单个&符号:

if(myList.Count > 0 & myString.Equals("value"))
Run Code Online (Sandbox Code Playgroud)

它会评估两者.

  • 在这种情况下你肯定不会.如果您的第二个条件是执行某些您想要发生的更新的函数调用(但我不知道您为什么这样做),则可以使用它. (4认同)

MBe*_*Ben 21

不,它不会被考虑.(这称为短路.)

编译器足够聪明(并且语言规范要求)知道如果第一个条件是false,则表达式无法计算true.

正如雅各布指出的那样||,当第一个条件出现时true,第二个条件将不会被评估.

  • 反之亦然|| - 如果第一个选项为"true",则不会评估第二个选项. (3认同)

Rut*_*ani 7

如果逻辑运算符是AND(&&),则IF语句将评估第一个表达式 - 如果第一个表达式为false,则不会计算第二个表达式.这对于在引用上调用方法之前检查变量是否为空非常有用 - 以避免空指针异常

如果逻辑运算符是OR(||),则IF语句将评估第一个表达式 - 如果第一个表达式为真,则不会计算第二个表达式.

编译器和运行时针对此行为进行了优化