Если у меня есть оператор If
с двумя условиями - и первое не выполняется, будет ли второе условие даже рассматриваться или оно сразу перейдет к else
? Так, в следующем примере, если myList.Count == 0
, будет ли myString
сравниваться с "значением" или сразу перейдет к else
?
if(myList.Count > 0 && myString.Equals("value"))
{
//Do something
}
else
{
//Do something else
}
Он перестанет оценивать, потому что вы'с использованием двойной амперсанд &&амп заново; оператор. Это называется короткое замыкание.
Если вы меняли ее один амперсанд:
if(myList.Count > 0 & myString.Equals("value"))
она будет оценить обе.
Нет, это не будет рассматриваться. (Это известно как короткое замыкание).
Компилятор достаточно умен (и этого требует спецификация языка), чтобы понять, что если первое условие false
, то выражение никак не может быть оценено в true
.
И как указал Джейкоб для ||
, когда первое условие true
, второе условие не будет оценено.
Если логический оператор и (&АМП;&) тогда, если заявление будет оценивать первое выражение - Если первое ложно, то не оценить второй. Это полезно, чтобы проверить, если переменная имеет значение null перед вызовом метода на ссылку - во избежание исключения нулевого указателя
Если логический оператор или (||) Затем, если заявление будет оценивать первое выражение - Если первое верно, то не оценить второй.
Компиляторы и среды выполнения, которые оптимизированы для такого поведения
Нет, второе условие будет пропущено, если вы используете &&
,
Если вы используете &
, оно будет считаться
Рассмотрим следующие:
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 и функции тесты являются evaulated хотя testx была ложной.
Если вы изменить тест в && только сначала было проверено.
.Net поддерживает закоротить
поэтому, когда первое условие не проходит, то это не проверка второго условия....В C# || и &АМП;& являются короткое замыкание версий логические операторы | и & соответственно....Часто бывает быстрее...
Выражение будет вычисляться слева направо, потому что это логично и эксплуатации. Если ложные, то прекратятся оценки. Он также имеет наибольший приоритет операций в выражении.
условный оператор and (&&усилителя;) выполняет логическое and над операндами типа bool, но оценивает только свой второй операнд, если это необходимо. Условного оператора and (&&) MSDN
Вот такой набор разделы листинг на C# операторов, начиная с наивысшего приоритета к низшему.