Как вы выходите из цикла 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;
    }
}