В цикле C # (не стесняйтесь отвечать за другие языки), в чем разница между break и continue в качестве средства выхода из структуры цикла и перехода к следующей итерации?
Пример:
foreach (DataRow row in myTable.Rows)
{
if (someConditionEvalsToTrue)
{
break; //what's the difference between this and continue ?
//continue;
}
}
c#
loops
enumeration
Seibar
источник
источник
continue;
остановит обработку текущегоrow
и перейдет к следующемуrow
из коллекции. С другой стороны, полностьюbreak;
покинетforeach
оператор, а остальные строки никогда не будут обработаны.Ответы:
break
полностью выйдет из цикла,continue
просто пропустит текущую итерацию.Например:
Прерывание вызовет выход цикла на первой итерации -
DoSomeThingWith
никогда не будет выполнен. Это здесь:Не будет выполняться
DoSomeThingWith
дляi = 0
, но цикл будет продолжаться иDoSomeThingWith
будет выполняться дляi = 1
кi = 9
.источник
Действительно простой способ понять это - поместить слово «цикл» после каждого ключевого слова. Термины теперь имеют смысл, если они просто читаются как повседневные фразы.
break
цикл - цикл прерывается и останавливается.continue
цикл - цикл продолжает выполняться со следующей итерации.источник
останов заставляет счетчик программы выпрыгнуть из области самого внутреннего цикла
Работает так
продолжить прыжки до конца цикла. В цикле for продолжаются переходы к выражению приращения.
Работает так
источник
for
цикл, но сработает ли это дляwhile
циклов до и после тестирования ? Записьgoto
заставляет меня верить в это, но нужна некоторая проверка.while
(«предварительно протестированный») иdo
-while
(«пост-протестированный») после выполненияcontinue;
инструкции будет выполнено следующее: условие цикла оценивается для принятия решения о необходимости выполнения дополнительной итерации. Конечно,break;
если условие цикла не проверено, цикл просто завершается полностью. Так чтоgoto
аналогия хороша для понимания этого аспекта.Раньше я всегда запутывался, должен ли я использовать разрыв или продолжить. Вот что помогает мне запомнить:
Когда использовать перерыв против продолжения?
источник
break
полностью остановитforeach
цикл,continue
перейдет к следующемуDataRow
.источник
Есть более чем несколько человек, которые не любят
break
иcontinue
. Последняя жалоба, которую я видел о них, была в JavaScript: Хорошие части Дугласа Крокфорда. Но я считаю, что иногда использование одного из них действительно упрощает вещи, особенно если ваш язык не включает циклdo-while
илиdo-until
стиль.Я склонен использовать
break
в циклах, которые что-то ищут в списке. После того, как найден, нет смысла продолжать, так что вы могли бы также выйти.я использую
continue
когда делаю что-то с большинством элементов списка, но все же хочу пропустить некоторые.Это
break
утверждение также пригодится при опросе на предмет правильного ответа от кого-то или чего-либо. Вместо:Вы можете устранить некоторые дубликаты и использовать:
do-until
Цикл , который я упоминал ранее это более элегантное решение для этой конкретной проблемы:Нет дублирования, и нет
break
необходимости.источник
Все дали очень хорошее объяснение. Я все еще публикую свой ответ, чтобы привести пример, если это может помочь.
Вот вывод:
Таким образом, 3 [Отпечатано] и 4 [Отпечатано] не будут отображаться, поскольку при i == 3 происходит перерыв.
Вот вывод:
Так что 3 [Printed] не будет отображаться, так как есть продолжение, когда я == 3
источник
Перемена
Разрыв заставляет петлю немедленно выйти.
Продолжить
Это делает противоположность разрыва. Вместо того, чтобы завершать цикл, он немедленно повторяет цикл, пропуская оставшуюся часть кода.
источник
Continue
не является противоположностьюbreak
,break
останавливает цикл,continue
останавливает текущую итерацию.Простой ответ:
Перерыв выходит из цикла немедленно.
Продолжить начинает обработку следующего элемента. (Если таковые имеются, переходя к линии оценки для / в течение)
источник
Примером
Печать 1, 2, 3 (на отдельных строках).
Добавить условие разрыва при i = 2
Теперь цикл печатает 1 и останавливается.
Замените разрыв на продолжение.
Теперь нужно зациклить отпечатки 1 и 3 (пропуская 2).
Таким образом,
break
останавливает цикл, тогда какcontinue
переходит к следующей итерации.источник
К сожалению, Ruby немного отличается. PS: моя память немного туманна, поэтому извиняюсь, если я ошибаюсь
вместо break / continue, он имеет break / next, который ведет себя одинаково с точки зрения циклов
Циклы (как и все остальное) являются выражениями и «возвращают» последнее, что они сделали. В большинстве случаев получение возвращаемого значения из цикла бессмысленно, поэтому каждый просто делает это
Однако вы можете сделать это
ОДНАКО, много кода ruby «эмулирует» цикл, используя блок. Канонический пример
Поскольку люди гораздо чаще хотят делать что-то с результатом блока, именно здесь он становится беспорядочным. break / next означает разные вещи в контексте блока.
перерыв выпрыгнет из кода, который вызвал блок
next пропустит остальную часть кода в блоке и вернет то, что вы указали, вызывающему блоку. Это не имеет никакого смысла без примеров.
Так что да. Ruby потрясающий, но у него есть несколько ужасных угловых случаев. Это второй худший из тех, что я видел за годы его использования :-)
источник
Пожалуйста, позвольте мне заявить об очевидном: обратите внимание, что добавление ни прерывания, ни продолжения не возобновит вашу программу; т.е. я поймал в ловушку определенную ошибку, затем после ее регистрации я захотел возобновить обработку, и между следующей строкой было больше задач с кодом, поэтому я просто позволил ей провалиться.
источник
Чтобы полностью вырваться из цикла foreach, используется break ;
Для перехода к следующей итерации цикла используется продолжить ;
Разрыв полезен, если вы просматриваете коллекцию Объектов (например, Строки в Datatable), и вы ищете конкретное совпадение, когда вы находите это совпадение, нет необходимости переходить через оставшиеся строки, поэтому вы хотите разбить вне.
Продолжение полезно, когда вы выполнили то, что вам нужно для выполнения итерации цикла. Вы, как правило, продолжите после if .
источник
если вы не хотите использовать break, вы просто увеличиваете значение I таким образом, чтобы сделать условие итерации ложным, и цикл не будет выполняться на следующей итерации.
источник
Что касается других языков:
источник