【问题标题】:How can I break a 'while' loop while I'm in a switch-case in C#? [duplicate]当我在 C# 中的 switch-case 中时,如何打破“while”循环? [复制]
【发布时间】:2021-04-09 01:52:01
【问题描述】:

如果 n 等于 3,我想打破这个 while 循环,但我该怎么做?

n = 0;
while(true){
    switch (n){
        case 3:
            break;
        default:
            break;
    }
}

【问题讨论】:

  • goto 是合法的少数几个地方之一

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


【解决方案1】:
bool run = true;
n = 0;
while(run){
    switch (n){
        case 3:
            run = false
            break;
        default:
            break;
    }
}

或者你可以使用n

n = 0; 而(n!=3){ }

【讨论】:

    【解决方案2】:

    您无法跳出嵌套块。您必须使用不同的条件控制结构。

    例如,您可以在 while 循环中使用布尔值:

    while(true) {
      var breakWhile = false;
      switch(n) {
        case 3:
          breakWhile = true;
          break;
        default:
          break;
      }
      if (breakWhile) {
        break;
      }
    }
    

    这是一个相当人为的示例,展示了一般意义上的操作方式。

    在这个简单的示例中,您可以将代码简化为:

    while (n != 3) {
    
    }
    

    但我认为您对打破嵌套结构的通用方法感兴趣。

    另一个不赞成练习的方法是使用goto statement。您通常应该避免这种情况,但为了完整起见在此显示,并且顺便说一下,摆脱深度嵌套的循环是 goto 语句的少数可接受的用法之一。

    来自文档:

    goto 语句对于跳出深度嵌套的循环也很有用。

    while (true) {
      switch(n) {
        case 3:
          goto outer_scope;
        default:
          break;
      }
    }
    outer_scope:
      // ...
    

    【讨论】:

    • 或者只是while (!breakWhile)? (当然是在将其声明移出循环之后)
    • 或者那个......我试图保持尽可能接近原始结构,因为我认为 OP 正在寻找一种通用方法来打破嵌套循环或范围
    【解决方案3】:

    一种方法是使用 do ... while,而不是 while ... do。

    var n = 0;
    do {
        switch (n)
        {
            case 3:
                break;
            default: 
                break;
        }
    } while(n != 3);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      相关资源
      最近更新 更多