Комментарии 7
Не знаю, насколько это актуально для C#, но непосредственно вложенные циклы обычно компилируются в более эффективный код.
А вся конструкция взята из Фортрана.
Хотя вообще прерывать внутренний цикл не очень хорошо с точки зрения конвейеризации.
Никогда не было у меня такой необходимости, но удивлен что в c# этого не было, хотя оно есть в js.
Честно говоря, второй (новый) способ мне кажется достаточно легко читаемым. Но конструкция очень специфическая, тут согласен
Да, пример действительно ужасный у них. В целом изначальный код следовало бы переписать с использованием goto:
string foundValue = null;
bool shouldBreak = false;
for (int x = 0; x < xMax; x++)
{
for (int y = 0; y < yMax; y++)
{
foundValue = GetValue(x, y);
if (foundValue == targetValue)
{
goto Exit;
}
}
}
Exit: ProcessValue(foundValue);Что лаконично, читаемо и понятно. Более того использование goto для выхода из вложенных циклов предлагается в документации по C# от MS. Аналогично с выходом из switch в том же разделе показано использование goto для этого и для перехода в отдельно взятый case.
С критикой примеров согласен. А фичу считаю полезной. У меня сейчас как раз такой проект, где вот этих вложенных циклов много. И элегантная замена goto или флагам была бы весьма кстати.

Labeled break and continue в C# 15 — разбор плохого примера и поиск реального кейса