首页 文章

C#循环 - 中断与继续

提问于
浏览
708

在C#(随意回答其他语言)循环中,break和continue之间的区别是什么,作为离开循环结构的手段,并进入下一次迭代?

例:

foreach (DataRow row in myTable.Rows)
{
    if (someConditionEvalsToTrue)
    {
        break; //what's the difference between this and continue ?
        //continue;
    }
}

15 回答

  • 5

    Break

    Break强制循环立即退出 .

    Continue

    这与休息相反 . 它不是终止循环,而是立即再次循环,跳过剩下的代码 .

  • 3

    简单回答:

    Break 立即退出循环 .
    Continue 开始处理下一个项目 . (如果有,通过跳转到for / while的评估行)

  • 8

    有不少人不喜欢 breakcontinue . 我看到的最新投诉是用JavaScript:道格拉斯克罗克福德的好零件 . 但我发现有时使用其中一个确实简化了事情,特别是如果你的语言不包含 do-whiledo-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 .

  • 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 [打印]和4 [打印]将不显示,因为当i == 3时有中断

    //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 [已打印]

    所以3 [打印]将不会显示,因为当i == 3时会继续显示

  • 94

    如果你不想使用 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
    }
    
  • 5

    以身作则

    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 跳到下一次迭代 .

  • 0

    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循环中,继续跳转到增量表达式 .

    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:;
    }
    
  • 5

    理解这一点的一个非常简单的方法是在每个关键字后面加上“循环”一词 . 如果他们只是像日常用语一样阅读,那么这些术语现在就有意义

    break 循环 - 循环被破坏并停止 .

    continue loop - 循环继续执行下一次迭代 .

  • 6

    我以前总是混淆是否应该使用休息或继续 . 这有助于我记住:

    何时使用break vs continue?

    • Break - 很遗憾,你们分手了 .

    Break

    • Continue - 意味着你今天要给予休息并明天将其全部排序(即跳过当前的迭代)!

    Continue

  • 2

    要彻底打破foreach循环,使用 break ;

    要进入循环中的下一个迭代,使用 continue ;

    Break 在循环遍历一组对象(如数据表中的行)并且您正在搜索特定匹配时非常有用,当您找到匹配项时,无需继续执行其余行,因此您需要打破出 .

    当您在循环迭代中完成所需的操作时, Continue 非常有用 . if 之后通常会 continue .

  • 12

    至于其他语言:

    '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
    
  • 371

    break 将完全停止 foreach 循环, continue 将跳到下一个 DataRow .

  • 25

    不幸的是,Ruby有点不同 . PS:我的记忆有点模糊,如果我错了,请道歉

    它不是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会跳出调用块的代码

    next将跳过块中的其余代码,并将您指定的内容“返回”给块的调用者 . 这没有任何意义没有例子 .

    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很棒,但它有一些可怕的角落案例 . 这是我在使用它的过程中看到的第二个最糟糕的一个:-)

  • 19

    break 将完全退出循环, continue 将只是 skip 当前迭代 .

    例如:

    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 ,但循环将 continueDoSomeThingWith 将执行 i = 1i = 9 .

  • 1350

    请让我说明显而易见的事项:请注意,既不添加也不继续,将恢复您的计划;即我陷入某个错误,然后在记录之后,我想恢复处理,并且在下一行之间有更多的代码任务,所以我让它落空 .

相关问题