Как вы выходите из цикла foreach в пределах блока переключения?
Обычно вы используете break, но если вы используете разрыв в блоке коммутатора, он просто вытащит вас из блока switch и цикл 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;
}
}