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

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

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

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

Ответ 1

Он перестанет оценивать, потому что вы используете двойной амперсанд && оператор. Это называется short-circuiting.

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Если вы используете &, это будет считаться

Ответ 5

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

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 был ложным.

Если вы измените тест на && проверен только первый.

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

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