在C#循环中,中断和继续作为离开循环结构并进入下一次迭代的方法有什么区别?
例子:
foreach (DataRow row in myTable.Rows)
{
if (someConditionEvalsToTrue)
{
break; //what's the difference between this and continue ?
//continue;
}
}
在C#循环中,中断和继续作为离开循环结构并进入下一次迭代的方法有什么区别?
例子:
foreach (DataRow row in myTable.Rows)
{
if (someConditionEvalsToTrue)
{
break; //what's the difference between this and continue ?
//continue;
}
}
当前回答
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);
}
对于i=0,将不执行DoSomeThingWith,但循环将继续,并且对于i=1到i=9,将执行DoSome ThingWith。
其他回答
break将完全停止foreach循环,continue将跳到下一个DataRow。
不幸的是,Ruby有点不同。PS:我的记忆有点模糊,所以如果我错了,请道歉
它有break/next,而不是break/content,它们在循环方面的行为相同
循环(和其他一切一样)是表达式,并“返回”它们所做的最后一件事。大多数时候,从循环中获取返回值是没有意义的,所以每个人都这样做
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很棒,但它有一些可怕的角落。这是我多年来用过的第二糟糕的:-)
break导致程序计数器跳出最内层循环的范围
for(i = 0; i < 10; i++)
{
if(i == 2)
break;
}
像这样工作
for(i = 0; i < 10; i++)
{
if(i == 2)
goto BREAK;
}
BREAK:;
continue跳转到循环的末尾。在for循环中,continue跳转到增量表达式。
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:;
}
打破
中断将强制循环立即退出。
持续
这与break相反。它没有终止循环,而是立即再次循环,跳过其余的代码。
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);
}
对于i=0,将不执行DoSomeThingWith,但循环将继续,并且对于i=1到i=9,将执行DoSome ThingWith。