Заметки C#Выход из вложенного цикла(двойной цикл)
Имеем код
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i > 5 && j == 7)
{
//действия
//выход из цикла
}
}
}
Использую break внутри второго цикла даст только выход из него
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i > 5 && j == 7)
{
//действия
/*
При такой конструкции мы будем выходить из внутреннего цикла (j), но внешний так и
продолжит свою работу(i)
*/
break;//выход из цикла
}
}
}
Для полного выхода из цикла есть несколько вариантов.
1) применить оператор
goto
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i > 5 && j == 7)
{
//действия
goto Found;//выход из цикла
}
}
}
Found:
//едем дальше
2) Затолкать цикл в функции и использовать оператор return
public void Loop()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i > 5 && j == 7)
{
//действия
return;//выход из цикла
}
}
}
}
3) Использование дополнительного флага для первого цикла
var flag = false;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i > 5 && j == 7)
{
//действия
//выход из цикла
flag = true;
break;
}
}
if(flag == true) break;
}
4) Последний вариант. Присвоить i максимально возможное значение при первом выходе из цикла.
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i > 5 && j == 7)
{
//действия
//выход из цикла
i = Int32.MaxValue - 1;
/*
Это примерно тоже само что сделать
i = 1000000;
*/
}
}
}