使用嵌套开关中断循环语句
Break for loop statement with nested switch
我正在尝试使用传统的 break 来打破 forloop
,但在这种情况下,我发现自己陷入了这个嵌套的 switch 其中 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;
}
}
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;
}
}
有多种方法可以解决这个问题:
使用辅助变量
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
}
}
然后在消费代码中简单地调用该方法。
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++;
}
我正在尝试使用传统的 break 来打破 forloop
,但在这种情况下,我发现自己陷入了这个嵌套的 switch 其中 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;
}
}
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;
}
}
有多种方法可以解决这个问题:
使用辅助变量
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
}
}
然后在消费代码中简单地调用该方法。
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++;
}