Перерыв для оператора l oop с вложенным переключателем - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь сломать forloop, используя break как обычно, но в этом случае я застрял с этим вложенным переключателем , где break работает только в switch scope, а l oop продолжает повторяться.

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 ]

2 голосов
/ 28 марта 2020

Существует несколько вариантов решения этой проблемы:

Использование вспомогательной переменной

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 голос
/ 28 марта 2020
    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++;
    }
1 голос
/ 28 марта 2020
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; 
    }
}
...