Как вы вырваться из цикла foreach в пределах блока переключения?Вырыв из петли foreach изнутри коммутационного блока
Обычно вы используете перерыв, но если вы используете перерыв в распределительном блоке он будет просто получить вас из блока переключателей и цикл Еогеаспа продолжит выполнение:
foreach (var v in myCollection)
{
switch (v.id)
{
case 1:
if (true)
{
break;
}
break;
case 2;
break
}
}
То, что я сейчас делаю когда мне нужно вырваться из foreach
, в то время как в блоке switch
устанавливается значение bool
, помещенное за пределами цикла, в true и проверяющее значение этого bool каждый раз, когда вводится foreach
и перед входом в блок переключателя. Что-то вроде этого:
bool exitLoop;
foreach (var v in myCollection)
{
if (exitLoop) break;
switch (v.id)
{
case 1:
if (true)
{
exitLoop = true;
break;
}
break;
case 2;
break
}
}
Это работает, но я продолжаю думать, что должен быть лучшим способом сделать это я не в курсе ...
EDIT: Интересно, почему это не было реализовано в .NET действительно аккуратный способ работает в PHP как упоминалось @jon_darkstar?
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "At 5<br />\n";
break 1; /* Exit only the switch. */
case 10:
echo "At 10; quitting<br />\n";
break 2; /* Exit the switch and the while. */
default:
break;
}
}
Не уверен, что существует лучший способ, но он будет похож на необходимость вырваться из внешнего цикла, находясь внутри внутреннего цикла. До сих пор я так и не нашел этого, и, следовательно, использование значения флага кажется единственным способом. –
Возможный дубликат [Break out of while loop, содержащий оператор switch] (http://stackoverflow.com/questions/1987379/break-out-of-a-while-loop-that-contains-a-switch- заявление) – ruffin