Оператор goto
Оператор goto выполняет безусловный переход
на метку, объявленную в том же методе. Метка -
это имя с двоеточием; на неё нельзя прыгать из
другого метода. В switch
допустим goto case для перехода между
ветками. Для обычного выхода из цикла чаще берут
break.
Синтаксис
goto метка;
// ...
метка:
// код после перехода
Пример
Давайте перейдём вперёд на метку и пропустим промежуточный вывод:
using System;
class Program
{
static void Main()
{
int num = 1;
Console.WriteLine("start");
if (num > 0)
{
goto done;
}
Console.WriteLine("skip");
done:
Console.WriteLine("finish");
}
}
Результат выполнения кода:
"start"
"finish"
Пример
Давайте выйдем из вложенного цикла на общую метку:
using System;
class Program
{
static void Main()
{
for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
{
if (i == 2 && j == 2)
{
goto exitLoops;
}
Console.WriteLine(i + " " + j);
}
}
exitLoops:
Console.WriteLine("done");
}
}
Результат выполнения кода:
"1 1"
"1 2"
"1 3"
"2 1"
"done"
Пример
Давайте в switch перейти из одной ветки
в другую через goto case:
using System;
class Program
{
static void Main()
{
int code = 1;
switch (code)
{
case 1:
Console.WriteLine("one");
goto case 2;
case 2:
Console.WriteLine("two");
break;
default:
Console.WriteLine("other");
break;
}
}
}
Результат выполнения кода:
"one"
"two"
Пример
Давайте перейти на метку после проверки условия:
using System;
class Program
{
static void Main()
{
int num = 5;
if (num < 0)
{
goto negative;
}
Console.WriteLine("non-negative");
goto end;
negative:
Console.WriteLine("negative");
end:
Console.WriteLine("end");
}
}
Результат выполнения кода:
"non-negative"
"end"