【问题标题】:While loop ending with a switch: should I use "break" or "continue" to conclude cases?While 循环以 switch 结尾:我应该使用“break”还是“continue”来结束案例?
【发布时间】:2020-06-14 18:42:19
【问题描述】:

好奇心问题,很简单。

假设我有一个while 循环,并且在这个循环中执行的最后一段代码是一个switch 语句,我应该使用break 还是使用continue 完成我的case 块?

据我所知,执行的结果几乎相同。其中一个更快吗?有奇怪的边缘情况吗?

while (ShouldLoop)
{
     switch (myInt)
     {
         case 0:
             doStuff();
             break; // or continue?
         default:
             break; // that is the question.
     }
 }

【问题讨论】:

  • 这取决于你的逻辑,break 打破整个循环并继续循环执行代码,continue 将处理循环的下一次迭代
  • @PavelAnikhouski 由于break 在switch 内,它会脱离开关而不是循环。
  • 使用break,否则阅读起来会很混乱,因为你必须在心理上将上下文从switch切换到while。

标签: c# while-loop switch-statement break continue


【解决方案1】:

continue 将始终作用于封闭的 while 循环,无论您将它放在代码中的哪个位置,指示编译器继续对 ShouldLoop 进行下一次评估,同时在继续后停止执行任何代码.另一方面,break 的行为不同,无论您将其放置在 while 循环的第一级,它都会简单地退出循环,而将其放置在 switch-case 内部将停止评估并退出 switch-case 一次编译器遇到关键字。

正如@simon-pearson 所指出的,在某些情况下continue 内switch-case 是有意义的,但这绝对不是可读的代码,这样的用例应该被其他一些解决方法代替。 通常switch-case应该写成break。

【讨论】:

    【解决方案2】:

    几乎可以肯定,您应该使用break 完成您的案例语句块。考虑两种情况:

    • 如果重要的是您不会陷入以下case 语句,那么您应该使用break。
    • 您提供的代码示例不完整,在某些情况下您希望跳过 switch 语句之后的代码。在这种情况下,continue 语句将比上述情况更合适,但这听起来有点像意大利面条。如果是这种情况,您最好在case 语句块中设置一个布尔变量并使用break。然后,您可以在此布尔标志上使用 if 语句包装以下代码。

    这有点主观,因为两者都“有效”,但一个具有更清晰的 IMO 意图。

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2016-06-14
      • 2021-07-30
      • 1970-01-01
      • 2018-06-25
      • 2019-06-30
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      相关资源
      最近更新 更多