在C#(随意回答其他语言)循环中,break和continue之间的区别是什么,作为离开循环结构的手段,然后进入下一次迭代?
示例:
foreach (DataRow row in myTable.Rows)
{
if (someConditionEvalsToTrue)
{
break; //what's the difference between this and continue ?
//continue;
}
}
答案 0 :(得分:1409)
break
将完全退出循环,continue
将跳过当前迭代。
例如:
for (int i = 0; i < 10; i++) {
if (i == 0) {
break;
}
DoSomeThingWith(i);
}
中断将导致循环在第一次迭代时退出 - DoSomeThingWith
永远不会被执行。这是:
for (int i = 0; i < 10; i++) {
if(i == 0) {
continue;
}
DoSomeThingWith(i);
}
不会对DoSomeThingWith
执行i = 0
,但循环继续,DoSomeThingWith
将执行i = 1
到i = 9
}。
答案 1 :(得分:375)
理解这一点的一个非常简单的方法是在每个关键字后面加上“循环”一词。如果这些术语只是像日常用语一样被阅读,那么它们现在就有意义了。
break
循环 - 循环已中断并停止。
continue
循环 - 循环继续执行下一次迭代。
答案 2 :(得分:96)
中断会导致程序计数器超出最内层循环的范围
for(i = 0; i < 10; i++)
{
if(i == 2)
break;
}
像这样工作
for(i = 0; i < 10; i++)
{
if(i == 2)
goto BREAK;
}
BREAK:;
继续跳转到循环结束。在for循环中,继续跳转到增量表达式。
for(i = 0; i < 10; i++)
{
if(i == 2)
continue;
printf("%d", i);
}
像这样工作
for(i = 0; i < 10; i++)
{
if(i == 2)
goto CONTINUE;
printf("%d", i);
CONTINUE:;
}
答案 3 :(得分:25)
break
会完全停止foreach
循环,continue
会跳到下一个DataRow
。
答案 4 :(得分:23)
我以前总是对我是否应该使用休息或继续感到困惑。这有助于我记住:
答案 5 :(得分:19)
有不少人不喜欢break
和continue
。我看到的关于他们的最新投诉是道格拉斯克罗克福德的 JavaScript:The Good Parts 。但我发现有时使用其中一个确实简化了事情,特别是如果您的语言不包含do-while
或do-until
样式的循环。
我倾向于在循环中使用break
来搜索列表中的某些内容。一旦找到,继续没有意义,所以你也可以退出。
我在使用列表的大多数元素执行某些操作时使用continue
,但仍想跳过几个。
当轮询来自某人或某事的有效回复时,break
语句也会派上用场。而不是:
Ask a question
While the answer is invalid:
Ask the question
你可以消除一些重复和使用:
While True:
Ask a question
If the answer is valid:
break
我之前提到的do-until
循环是针对该特定问题的更优雅的解决方案:
Do:
Ask a question
Until the answer is valid
没有重复,也不需要break
。
答案 6 :(得分:13)
所有人都给出了非常好的解释。我仍在发布我的答案,只是为了举例说明这是否有帮助。
// break statement
for (int i = 0; i < 5; i++) {
if (i == 3) {
break; // It will force to come out from the loop
}
lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}
这是输出:
0 [已打印] 1 [已打印] 2 [已打印]
所以3 [印刷]&amp;当i == 3
时,4 [打印]不会显示为中断//continue statement
for (int i = 0; i < 5; i++) {
if (i == 3) {
continue; // It will take the control to start point of loop
}
lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}
这是输出:
0 [已打印] 1 [已打印] 2 [已打印] 4 [已打印]
因此,当i == 3
时,将继续显示3 [已打印]答案 7 :(得分:7)
<强>额强>
断开强制循环立即退出。
继续强>
这与休息相反。它不是终止循环,而是立即再次循环,跳过剩下的代码。
答案 8 :(得分:6)
以示例
foreach(var i in Enumerable.Range(1,3))
{
Console.WriteLine(i);
}
打印1,2,3(在不同的行上)。
在i = 2
处添加休息条件foreach(var i in Enumerable.Range(1,3))
{
if (i == 2)
break;
Console.WriteLine(i);
}
现在循环打印1并停止。
用继续替换休息。
foreach(var i in Enumerable.Range(1,3))
{
if (i == 2)
continue;
Console.WriteLine(i);
}
现在循环打印1和3(跳过2)。
因此,break
会停止循环,而continue
会跳到下一次迭代。
答案 9 :(得分:5)
而不是break / continue,它有break / next,在循环方面表现相同
循环(就像其他所有东西一样)是表达式,并“返回”他们做的最后一件事。大多数情况下,从循环中获取返回值是没有意义的,所以每个人都只是这样做
a = 5
while a < 10
a + 1
end
你可以这样做
a = 5
b = while a < 10
a + 1
end # b is now 10
但是,很多ruby代码通过使用块来模拟'循环'。 规范的例子是
10.times do |x|
puts x
end
因为人们想要用块的结果来做事情更为常见,这就是它变得混乱的地方。 break / next在块的上下文中表示不同的东西。
break将跳出调用块的代码
接下来将跳过块中的其余代码,并将您指定的内容“返回”给块的调用者。没有例子,这没有任何意义。
def timesten
10.times{ |t| puts yield t }
end
timesten do |x|
x * 2
end
# will print
2
4
6
8 ... and so on
timesten do |x|
break
x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped
timesten do |x|
break 5
x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5
timesten do |x|
next 5
x * 2
end
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.
所以是的。 Ruby很棒,但它有一些可怕的角落案例。这是我在使用它的过程中看到的第二个最差的: - )
答案 10 :(得分:5)
简单回答:
中断立即退出循环 继续开始处理下一个项目。 (如果有任何,通过跳转到for / while的评估线)
答案 11 :(得分:5)
请让我明确指出:请注意,既不添加也不继续,将恢复您的计划;即我陷入某个错误,然后在记录之后,我想恢复处理,并且在下一行之间有更多的代码任务,所以我让它落空。
答案 12 :(得分:3)
要彻底摆脱foreach循环,使用 break ;
要进入循环中的下一个迭代,使用继续;
中断非常有用,如果您循环遍历一组对象(如数据表中的行)并且您正在搜索特定匹配项,当您找到该匹配项时,则无需继续通过剩余的行,所以你想爆发。
继续在您完成循环迭代所需的内容时非常有用。在 if 之后,您通常会继续。
答案 13 :(得分:2)
如果你不想使用 break ,你只需增加I的值,使迭代条件为false,循环不会在下一次迭代时执行。
for(int i = 0; i < list.Count; i++){
if(i == 5)
i = list.Count; //it will make "i<list.Count" false and loop will exit
}
答案 14 :(得分:0)
至于其他语言:
'VB
For i=0 To 10
If i=5 then Exit For '= break in C#;
'Do Something for i<5
next
For i=0 To 10
If i=5 then Continue For '= continue in C#
'Do Something for i<>5...
Next