使用嵌套开关中断for循环语句

时间:2020-03-27 23:26:56

标签: c# for-loop break

我正尝试使用传统的 break 来打破forloop,但是在这种情况下,我发现自己被嵌套的 switch < / strong>,其中 break 仅在 switch 范围内起作用,并且循环不断迭代。

for (int i = 0; i < lenght; i++)
{
    switch (enum)
    {
        case Enum.some_1: break;

        case Enum.some_2: break;

        case Enum.some_3: break; 
    }
}

3 个答案:

答案 0 :(得分:2)

有多种方法可以解决此问题:

使用辅助变量

bool exit = false;
for (int i = 0; i < length && !exit; i++)
{
  switch(enum)
  {
    case Enum.case_which_breaks:
      exit = true;
      break;

    // other cases
  }

  // some other code, which may use `i`
}

使用辅助方法

如果您可以将整个for块重构为一个辅助方法,这将更加简单。在这种情况下,您将使用return而不是break

private Result HandleInternally(int length, Enum enum, Request params)
{
  for (int i = 0; i < length; i++)
  switch (enum)
  {
    case Enum.case_which_breaks:
      Result result = new Result(); //populate the result
      return result;
    // other cases
  }


}

然后在使用代码中只需调用该方法即可。

答案 1 :(得分:1)

bool exitForLoop = false;
for (int i = 0; i < length && !exitForLoop; i++)
{
    switch (enum)
    {
        case Enum.some_1: exitForLoop = true; break;
        case Enum.some_2: break;
        case Enum.some_3: break; 
    }
}

答案 2 :(得分:1)

    bool exit = false;
    int i = 0;
    while (!exit && i < length)
    {
        switch (enum)
        {
        case Enum.some_1: exit = true; break;

        case Enum.some_2: exit = true; break;

        case Enum.some_3: exit = true; break; 
        }
        i++;
    }