есть ли эквивалент Java-разрыва в C # или обходной путь - PullRequest
20 голосов
/ 10 октября 2009

Я конвертирую некоторый код Java в C # и обнаружил несколько помеченных выражений "break" (например,)

label1:
    while (somethingA) {
       ...
        while (somethingB) {
            if (condition) {
                break label1;
            }
        }
     }

Есть ли эквивалент в C # (текущее чтение предполагает, что нет), и если нет, есть ли какое-либо преобразование, кроме (скажем), наличия флагов bool для указания, прерывать ли на каждом конце цикла (например,)

bool label1 = false;
while (somethingA)
{
   ...
    while (somethingB)
    {
        if (condition)
        {
            label1 = true;
            break;
        }
    }
    if (label1)
    {
        break;
    }
}
// breaks to here

Мне было бы интересно узнать, почему в C # этого нет, поскольку это не кажется очень злым.

1 Ответ

31 голосов
/ 10 октября 2009

Вы можете просто использовать goto, чтобы перейти непосредственно к метке.

while (somethingA)
{
    // ...
    while (somethingB)
    {
        if (condition)
        {
            goto label1;
        }
    }
}
label1:
   // ...

В языках, подобных C, goto часто оказывается чище для разрыва вложенных циклов, в отличие от отслеживания логических переменных и повторной проверки их в конце каждого цикла.

...