Для выполнения оператораgotoтребуется
х = 1; loopl: х++;
if(х < 100) goto loopl;
Кроме того, операторgotoможет быть использован для безусловного перехода к ветвиcaseилиdefaultв оператореswitch.Формально ветвиcaseилиdefaultвыполняют в оператореswitchроль меток. Поэтому они могут служить адресатами оператораgoto.Тем не менее операторgotoдолжен выполняться в пределах оператораswitch.Это означает, что его нельзя использовать как внешнее средство для безусловного перехода в операторswitch.В приведенном ниже примере программы демонстрируется применение оператораgotoв оператореswitch.
// Применить оператор goto в операторе switch.
using System;
class SwitchGoto { static void Main {
for(int i=l; i < 5; i++) {
switch(i) { '
case 1:
Console.WriteLine("В ветви case 1"); goto case 3; case 2:
Console.WriteLine("В ветви case 2"); goto case 1; case 3:
Console.WriteLine("В ветви case 3"); goto default; default:
Console.WriteLine("В ветви default"); break;
}
Console.WriteLine;
}
// goto case 1; // Ошибка! Безусловный переход к оператору switch недопустим.
}
}
Вот к какому результату приводит выполнение этой программы.
В ветви case 1 В ветви case 3 В ветви default
В ветви case 2 В ветви case 1 В ветви case 3 В ветви default
В ветви case 3 В ветви default
В ветви default
Обратите внимание на то, как операторgotoиспользуется в оператореswitchдля перехода к другим его ветвямcaseили к ветвиdefault.Обратите также внимание на то, что ветвиcaseне оканчиваются операторомbreak.Благодаря тому что операторgotoпрепятствует последовательному переходу от одной ветвиcaseк другой, упоминавшееся ранее правило недопущения "провалов" не нарушается, а следовательно, необходимость в применении оператораbreakв данном случае отпадает. Но как пояснялось выше, операторgotoнельзя использовать как внешнее средство для безусловного перехода к операторуswitch.Так, если удалить символы комментария в начале следующей строки:
// goto case 1; // Ошибка! Безусловный переход к оператору switch недопустим.
приведенная выше программа не будет скомпилирована. Откровенно говоря, применение оператораgotoв оператореswitch,в общем, не рекомендуется как стиль программирования, хотя в ряде особых случаев это может принести^определенную пользу.