IF声明是否会停止评估,如果它不符合第一个条件?

如果我有一个有两个条件的If语句 – 第一个失败,第二个条件是否会被考虑,或者是否会直接转到else ? 因此,在下面的例子中,如果myList.Count == 0myString会与“value”进行比较,还是会直接转到else

 if(myList.Count > 0 && myString.Equals("value")) { //Do something } else { //Do something else } 

它将停止评估,因为你正在使用&&操作符。 这被称为短路 。

如果你改变它

 if(myList.Count > 0 & myString.Equals("value")) 

它会评估两者。

不,它不会被考虑。 (这就是所谓的短路 。)

编译器足够聪明(并且需要通过语言规范)来知道如果第一个条件是false ,就没有办法将expression式评估为true

正如雅各指出的那样 当第一个条件true ,第二个条件将不被评估。

如果逻辑运算符是AND(&&),那么IF语句将评估第一个expression式 – 如果第一个expression式为假,则不会评估第二个expression式。 这对于在引用上调用方法之前检查variables是否为空是有用的 – 以避免空指针exception

如果逻辑运算符是OR(||),那么IF语句将评估第一个expression式 – 如果第一个expression式为真,则不会评估第二个expression式。

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

不,第二个条件会被跳过,如果你使用&&

如果您使用&将被考虑

考虑以下内容:

 static int? x; static int? y; static void Main(string[] args) { x = 5; if (testx() & testy()) { Console.WriteLine("test"); } } static Boolean testx() { return x == 3; } static Boolean testy() { return y == 10; } 

如果你通过testx和testy函数的追踪,即使testx是错误的也会被忽略。

如果您将testing更改为&&只有第一个被选中。

在你的例子中,第二个语句只有在第一个语句失败时才会被评估。 逻辑AND &&只有在两个操作数都为真时才返回true,也就是短路评估

.NET支持short circuiting所以当第一个条件失败时,它不会检查第二个条件….在C#中 &&是逻辑运算符|的短路版本 和&分别….它通常也更快…

expression式将从左到右进行评估,因为它是一个逻辑与运算。 如果错误,将停止评估。 在你的expression中,它也是最重要的操作。

条件AND运算符(&&)执行其bool操作数的逻辑与,但只在必要时评估其第二个操作数。 有条件和运算符(&&) MSDN

以下是一组列出从最高优先级到最低优先级的C#运算符的部分 。