在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;
}
}
当前回答
举个例子
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并停止。
用continue替换中断。
foreach(var i in Enumerable.Range(1,3))
{
if (i == 2)
continue;
Console.WriteLine(i);
}
现在循环打印1和3(跳过2)。
因此,break会停止循环,而continue会跳到下一次迭代。
其他回答
不幸的是,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相反。它没有终止循环,而是立即再次循环,跳过其余的代码。
要完全脱离foreach循环,使用break;
要转到循环中的下一个迭代,请使用continue;
如果您在对象集合(如数据表中的行)中循环,并且正在搜索特定的匹配项,则中断非常有用,当您找到匹配项时,无需继续遍历剩余的行,因此您需要中断。
当您完成了循环迭代中所需的任务时,Continue非常有用。通常情况下,你会在一个if之后继续。
何时使用中断与继续?
分手-我们将永远离开循环,永远分手。再见。
继续-意味着你今天要休息一下,明天再把它整理好(即跳过当前迭代)!
(Corny故事)\(ツ)/“”和图片,但希望能帮助你记住。
抓握提醒:不知道为什么要使用这些词。如果您想跳过迭代,为什么不使用skip而不是continue?如果给出了正确的名称,整个堆栈溢出问题和1000名开发人员不会感到困惑。)
break将完全停止foreach循环,continue将跳到下一个DataRow。