【问题标题】:break and continue in a loop enclosed switch block在循环封闭的开关块中中断并继续
【发布时间】:2015-11-23 09:14:36
【问题描述】:

所以我有一些看起来像这样的 C# 代码:

while(condition)
{
    switch(anumber)
    {
        case 0:
            //do something
            break;
        case 1:
            //do something
            break;
        //and so on
    }
}

作为一个编程菜鸟,我最近将关键字continue 添加到我的词汇表中。在做了一些研究后,我遇到了这个:

continue 语句与封闭循环相关

所以我的代码也应该像这样工作:

while(condition)
{
    switch(anumber)
    {
        case 0:
            //do something
            continue;
        //and so on
    }
}

但是编写不会产生编译器错误的代码并不是万能的。在循环封闭的开关块中使用continue 是个好主意吗?例如,性能是否有任何差异,或者这只是两种语法不同但在其他方面非常相似的方式来实现相同的结果?

【问题讨论】:

  • 首先,它在语法上是正确的。一般来说,谈论一个想法 - 在switch 语句中使用continue 并不是一种不好的做法。但是,它会降低可读性并使调试复杂化,我不会使用它。 continue 属于while,因此破坏了结构嵌套。此外,如果你在这个循环中只有switch,那么你根本不需要这个conitnuebreak 将提供相同的行为,因为没有其他语句。

标签: c# loops switch-statement


【解决方案1】:

如果切换后有几行代码, continue 关键字将忽略它们。试试这个,你会看到不同的:

while(condition)
{
    switch(anumber)
    {
        case 0:
            //do something
            break;
        case 1:
            //do something
            break;
        //and so on
    }
    Console.WriteLine("it's a message");
}

while(condition)
{
    switch(anumber)
    {
        case 0:
            //do something
            continue;
        case 1:
            //do something
            continue;
        //and so on
    }
    Console.WriteLine("it's a message");
}

【讨论】:

  • 在您的示例中,break 和 continue 之间存在很大差异。如果您仔细查看第一个示例,break 是 switch 语句的一部分。在第二个例子中 continue 是 while 循环的一部分。在第一个示例中,break 与每个 case 匹配,在第二个示例中,continue 与 while 循环匹配。
  • 是的,我知道。我只是想向 OP 展示不同之处。
  • 另外,如果同时使用 continue 和 break,这可能会造成混淆,因为它们不是像通常那样引用相同的结构。
  • 你说得对,我完全没有想到。但如果这是行为上的唯一区别,我认为为了便于阅读,我会坚持使用 break。
  • switch 语句不是循环,当您在 switch 语句块中编写 Continue 关键字时,它与包含 switch 语句的循环相关。简而言之,当您使用关键字 continue 时,它​​会重新启动当前正在解释的循环。
【解决方案2】:

https://stackoverflow.com/a/20019538/187650

continue 语句与 break 相关,但较少使用;它导致封闭的 for、while 或 do 循环的下一次迭代开始。在while和do中,这意味着测试部分立即执行;在 for 中,控制传递到增量步骤。

continue 语句仅适用于循环,不适用于 switch 语句。循环内的 switch 内的 continue 会导致下一次循环迭代。

以上内容适用于 C++,但对于 C#,如果您在 Visual Studio 中进行调试,您也会在按 F10 时看到差异。

在调试 break 语句时,它会先转到 switch 语句的结束 '}' 标记,然后再转到 while/for 循环。

在继续的情况下,switch语句的结束'}'标签不会被命中,直接进入while/for循环继续下一次迭代。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多