kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Анонимный пользователь
Вопрос

Будет ли оператор IF прекращать вычисление, если он не выполнил первое условие?

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

if(myList.Count > 0 && myString.Equals("value"))
{
//Do something
}
else
{
//Do something else
}
47 2012-07-06T08:28:00+00:00 8
Программирование
c#
if-statement
conditional-statements
Решение / Ответ
Paul Spangle
Paul Spangle
6-го июля 2012 в 8:31
2012-07-06T08:31:15+00:00
Дополнительно
Источник
Редактировать
#16618724

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

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

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

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

 TylerH
TylerH
Редактировал ответ 16-го февраля 2018 в 5:37
84
0
 MBen
MBen
6-го июля 2012 в 8:29
2012-07-06T08:29:03+00:00
Дополнительно
Источник
Редактировать
#16618721

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

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

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

 Michael
Michael
Редактировал ответ 15-го апреля 2015 в 6:20
21
0
Rutesh Makhijani
Rutesh Makhijani
6-го июля 2012 в 8:32
2012-07-06T08:32:35+00:00
Дополнительно
Источник
Редактировать
#16618725

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

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

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

Rutesh Makhijani
Rutesh Makhijani
Редактировал ответ 6-го июля 2012 в 8:37
7
0
Jigar Joshi
Jigar Joshi
6-го июля 2012 в 8:29
2012-07-06T08:29:55+00:00
Дополнительно
Источник
Редактировать
#16618722

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

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

4
0
 BugFinder
BugFinder
6-го июля 2012 в 8:36
2012-07-06T08:36:53+00:00
Дополнительно
Источник
Редактировать
#16618727

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

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

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

2
0
 dtsg
dtsg
6-го июля 2012 в 8:30
2012-07-06T08:30:54+00:00
Дополнительно
Источник
Редактировать
#16618723

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

1
0
Akash KC
Akash KC
6-го июля 2012 в 8:34
2012-07-06T08:34:53+00:00
Дополнительно
Источник
Редактировать
#16618726

.Net поддерживает закоротить поэтому, когда первое условие не проходит, то это не проверка второго условия....В C# || и &АМП;& являются короткое замыкание версий логические операторы | и & соответственно....Часто бывает быстрее...

1
0
Travis J
Travis J
22-го августа 2017 в 7:05
2017-08-22T19:05:22+00:00
Дополнительно
Источник
Редактировать
#16618728

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

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

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

0
0
Похожие сообщества 6
Microsoft Stack Jobs
Microsoft Stack Jobs
2 414 пользователей
Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks
Открыть telegram
С#
С#
2 330 пользователей
Стараемся не флудить. Пишем по делу. Правила: https://t.me/professorweb/430450 Для флуда @svoboda_obsh
Открыть telegram
CODE BLOG / C#
CODE BLOG / C#
1 763 пользователей
Чат для .NET разработчиков и C# программистов. По всем вопросам: @shwanoff Youtube-канал: https://youtube.com/codeblog Основной канал: @codeblog Вконтакте: https://vk.com/codeblog Правила: https://t.me/codeblog_csharp/246972 Вакансии по тегу #work
Открыть telegram
var chat = new Chat();
var chat = new Chat();
1 428 пользователей
Обсуждение вопросов по .NET Правила чата – https://blog.devdigest.today/chat-rules Чат для флуда – https://t.me/+zwxI91RGG6s2YzAy
Открыть telegram
C#/.NET Для Новичков
C#/.NET Для Новичков
293 пользователей
Группа создана для тех, кто изучает язык программирования C#. Верховный главнокомандующий: @BlackDeveloper Оффтоп - разрешен в меру, реклама - бан.
Открыть telegram
ext
ext
31 пользователей
Общение на темы YouTube канала и программирования. Вакансии не размещаем. Основной канал: @extremecode
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 3 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией