在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会跳到下一次迭代。

其他回答

至于其他语言:

    '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

若你们不想使用break,你们只需要增加I的值,这样就可以使迭代条件为假,并且循环不会在下一次迭代时执行。

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
}

有很多人不喜欢休息和继续。我最近看到的关于他们的投诉是在道格拉斯·克罗克福德的《JavaScript:好零件》中。但我发现,有时使用其中一个确实会简化事情,特别是当您的语言不包含do-while或do-wil循环样式时。

我倾向于使用插入循环来搜索列表中的内容。一旦被发现,就没有继续下去的意义,所以你最好退出。

我使用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

不需要重复,也不需要中断。

由于这里编写的示例对于理解这个概念非常简单,所以我认为查看所使用的continue语句的更实用版本也是一个好主意。例如:

我们要求用户输入5个唯一的数字,如果数字已经输入,我们会给他们一个错误,然后继续我们的程序。

static void Main(string[] args)
        {
            var numbers = new List<int>();


            while (numbers.Count < 5)
            { 
            
                Console.WriteLine("Enter 5 uniqe numbers:");
                var number = Convert.ToInt32(Console.ReadLine());



                if (numbers.Contains(number))
                {
                    Console.WriteLine("You have already entered" + number);
                    continue;
                }



                numbers.Add(number);
            }


            numbers.Sort();


            foreach(var number in numbers)
            {
                Console.WriteLine(number);
            }


        }

假设用户输入为1,2,2,2,3,4,5,则打印的结果为:

1,2,3,4,5

为什么?因为每次用户输入一个已经在列表中的数字时,我们的程序都会忽略它,并且不会将列表中的内容添加到列表中。现在,如果我们尝试相同的代码,但没有continue语句,让我们假设来自用户的相同输入是1,2,2,2,3,4,5。输出将是:

1,2,2,2,3,4

为什么?因为没有continue语句让我们的程序知道它应该忽略已经输入的数字。

现在,对于Break语句,我再次认为最好用例子来说明。例如:

在这里,我们希望我们的程序不断地要求用户输入一个数字。当用户键入“ok”时,我们希望循环终止,最后计算之前输入的所有数字的总和并将其显示在控制台上。

以下是break语句在本示例中的用法:

{
            var sum = 0;
            while (true)
            {
                Console.Write("Enter a number (or 'ok' to exit): ");
                var input = Console.ReadLine();

                if (input.ToLower() == "ok")
                    break;

                sum += Convert.ToInt32(input);
            }
            Console.WriteLine("Sum of all numbers is: " + sum);
        }

程序将要求用户输入一个数字,直到用户键入“OK”,然后才会显示结果。为什么?因为break语句在达到所需条件时完成或停止正在进行的过程。

如果没有break语句,程序将继续运行,当用户键入“ok”时不会发生任何事情。

我建议复制此代码并尝试删除或添加这些语句,然后自己查看更改。

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。