Остановит ли оператор IF прекратить оценку, если он не прошел первое условие?

Если у меня есть оператор If с двумя условиями – и первое не удается, будет ли второе условие даже рассмотрено или оно будет прямо на else ? Итак, в следующем примере, если myList.Count == 0 , будет ли myString сравниваться с «значением» или будет просто прямо в else ?

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

Он перестанет оценивать, потому что вы используете оператор double ampersand &&. Это называется короткозамкнутым .

Если вы изменили его на один амперсанд:

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

он будет оценивать оба.

Нет, это не будет рассмотрено. (Это известно как короткое замыкание ).

Компилятор достаточно умен (и требуется спецификацией языка), чтобы знать, что если первое условие является false , нет способа выражения для выражения true .

И как Иаков указал на || , когда первое условие true , второе условие не будет оцениваться.

Если логическим оператором является AND (&&), то оператор IF будет оценивать первое выражение – если первый из них является ложным, он не будет оценивать второй. Это полезно, чтобы проверить, является ли переменная нулевой до вызова метода в ссылке – чтобы исключить исключение нулевого указателя

Если логическим оператором является OR (||), то оператор IF будет оценивать первое выражение – если первое верно, оно не будет оценивать второе.

Компиляторы и время выполнения оптимизированы для такого поведения

Нет, второе условие будет пропущено, если вы используете && ,

Если вы используете & это будет рассмотрено

Рассмотрим следующее:

 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, будут evaulated, хотя testx был ложным.

Если вы измените тест на &&, будет проверено только первое.

В вашем примере второй оператор будет оцениваться только при первом сбое. Логическое значение AND && будет возвращать true только в том true если оба операнда верны, например , оценка короткого замыкания .

.NET поддерживает short circuiting поэтому, когда первое условие выходит из строя, оно не будет проверять вторую ситуацию … В C # || и && – короткозамкнутые версии логических операторов | и & соответственно …. Это часто быстрее тоже …

Выражение будет оцениваться слева направо, потому что это логическая операция И. Если значение false, оно прекратит оценку. Он также имеет наибольшее преимущество операций в вашем выражении.

Оператор условного-И (&&) выполняет логическое-И его операндов bool, но при необходимости оценивает его второй операнд. Условный и оператор (&&) MSDN

Ниже приведен список разделов, в которых перечислены операторы C #, начиная с наивысшего приоритета до самого низкого .