Есть ли эквивалент 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
часто оказывается более чистым за разрыв вложенных циклов, в отличие от отслеживания логических переменных и повторной проверки их в конце каждого цикла.