Есть ли эквивалент Java-разрыва в C# или обходной путь

Я конвертирую некоторый 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 ответ

Решение

Вы можете просто использовать goto прыгать прямо на этикетку.

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

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

Другие вопросы по тегам