Подтвердить что ты не робот

Порядок выполнения условий в С# Если оператор

Ниже приведены два оператора if, которые имеют несколько условий с использованием логических операторов. Логически оба они одинаковы, но порядок проверки отличается. Первый работает, а второй неудачный.

Я назвал MSDN для проверки того, является ли порядок выполнения определенных условий; но я не мог найти.

Рассмотрим условие множественной проверки, которое имеет && как логический оператор. Гарантировано ли это, что он всегда проверяет первое условие, и если это не выполняется, второе условие будет проверено не?

Я использовал подход 1, и он работает хорошо. Ищите ссылку MSDN, в которой используется использование.

UPDATE

Обратитесь "короткое замыкание" .

CODE

  List<string> employees = null;  

  if (employees != null && employees.Count > 0)
  {
        string theEmployee = employees[0];
  }

  if (employees.Count > 0 && employees != null)
  {
        string theEmployee = employees[0];
  }
4b9b3361

Ответ 1

& & и || операторы короткого замыкания. То есть:

1) Если && оценивает свой первый операнд как false, он не оценивает свой второй операнд.

2) Если || оценивает свой первый операнд как истинный, он не оценивает свой второй операнд.

Это позволяет вам делать null check && делать что-то с объектом, как если бы он не был нулевым, второй операнд не оценивался.

Ответ 2

Вы должны использовать:

  if (employees != null && employees.Count > 0)
  {
        string theEmployee = employees[0];
  }

&& будет shortcircuit, а employees.Count не будет отменено, если employees - null.

В вашем втором примере приложение будет генерировать исключение, если employees - null при попытке Count элементов в коллекции.

http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.71).aspx

Ответ 3

Условия проверяются слева направо. Оператор && будет оценивать только правильное условие, если левое условие истинно.

В разделе 5.3.3.24 Спецификации языка С# указано:

5.3.3.24 && выражения

Для выражения expr формы expr-first && expr-second:

. Определенное состояние присваивания v перед expr-first совпадает с определенным состоянием присваивания v перед выражением.

. Определенное состояние присваивания v до expr-second определенно назначается, если состояние v после expr-first либо определенно назначено, либо "определенно назначено после истинного выражения". В противном случае это определенно не назначено.

. Определенное состояние присваивания v после выражения expr определяется:

o Если состояние v после expr-first определенно назначено, то состояние v после expr определенно назначено.

o В противном случае, если состояние v после expr-second определенно назначено, а состояние v после expr-first "определенно назначено после ложного выражения" , то состояние v после expr определенно назначено.

o В противном случае, если состояние v после expr-second определенно назначено или "определенно назначено после истинного выражения", тогда состояние v после expr "определенно назначается после истинного выражения".

o В противном случае, если состояние v после expr-first "определенно назначено после ложного выражения" , а состояние v после expr-second "определенно назначено после ложного выражения" , тогда состояние v после expr равно "определенно назначается после ложного выражения".

o В противном случае состояние v после expr определенно не назначено.

Таким образом, это дает понять, что expr-first всегда оценивается и если true, то и только тогда вычисляется expr-second.

Ответ 4

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

Ответ 5

слева направо, в то время как выражение все еще сомнительно.

Ответ 6

& & и || операторы часто используются для проверки условий объекта.

1) "& &" условие оценивает свой первый операнд как false, он не оценивает свой второй операнд. Если он возвращает true, второе условие оценивается. Если второе условие истинно, то только оно вернет true. Таким образом, && может использоваться, чтобы убедиться, что все условия выполнены как действительные.

2) "||" условие оценивает свой первый операнд как истинный, он не оценивает свой второй операнд. Если первое условие оценивается как ложное, тогда только оно будет оценивать второе условие. Если это будет выполнено, оно вернет true. В противном случае, false.

Ответ 7

Гарантируется ли это, что он всегда будет проверять первое условие, и если что не выполняется, второе условие не будет проверено?

Короткий ответ - да.

Ответ 8

См., например, эту страницу MSDN для &&, которая описывает оценку короткого замыкания.

Вы можете проверить или подтвердить последовательность выполнения следующим образом:

int i;
bool b;
b=((i=3)==0 && (i=4)!=0);
Console.WriteLine(i);
b=((i=3)!=0 || (i=4)!=0);
Console.WriteLine(i);

В обоих случаях вы получаете 3, что показывает, что в обоих случаях происходит короткое замыкание. С другой стороны, вы можете использовать '&' или '|', соответственно, логический оператор, чтобы предотвратить это. Таким образом, вы получите результат 4, потому что оба условия были оценены.