Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

8.9.2Оператор continue

Оператор continue начинает новую итерацию ближайшего объемлющего оператора while, do, for или foreach.

оператор_continue: continue ;

Целью оператора continue является конечная точка внедренного оператора в составе ближайшего объемлющего оператора while, do, for или foreach. Если оператор continue не содержится ни в каком операторе while, do, for или foreach, возникает ошибка времени компиляции.

Если несколько операторов while, do, for или foreach вложены друг в друга, оператор continue применяется только к самому внутреннему из них. Для передачи управления с переходом через несколько уровней вложенности следует использовать оператор goto (§8.9.3).

Оператор continue не дает возможности выйти из блока finally (§8.10). Если оператор continue встречается внутри блока finally, цель оператора continue должна находиться в том же блоке finally, в противном случае возникнет ошибка времени компиляции.

Оператор continue выполняется следующим образом.

  • Если оператор continue производит выход из одного или нескольких блоков try, с которыми связаны соответствующие блоки finally, управление вначале передается в блок finally самого внутреннего оператора try. Если управление достигает конечной точки блока finally, после этого управление передается в блок finally следующего объемлющего оператора try. Этот процесс повторяется до тех пор, пока не будут выполнены все блоки finally всех сопутствующих операторов try.

  • Управление передается цели оператора continue.

Поскольку оператор continue осуществляет безусловную передачу управления в другое место, конечная точка оператора continue никогда не будет достижима.

8.9.3Оператор goto

Оператор goto передает управление оператору, обозначенному меткой.

оператор_goto: goto идентификатор ; goto case константное_выражение ; goto default ;

Целью оператора goto идентификатор является помеченный оператор с данной меткой. Если метка с указанным именем не существует в текущей функции-члене или если оператор goto не находится в области видимости метки, возникает ошибка времени компиляции. Это правило позволяет использовать оператор goto для передачи управления за пределы вложенной области видимости, но не внутрь вложенной области видимости. В этом примере

using System;

class Test { static void Main(string[] args) { string[,] table = { {"Red", "Blue", "Green"}, {"Monday", "Wednesday", "Friday"} };

foreach (string str in args) { int row, colm; for (row = 0; row <= 1; ++row) for (colm = 0; colm <= 2; ++colm) if (str == table[row,colm]) goto done;

Console.WriteLine("{0} not found", str); continue; done: Console.WriteLine("Found {0} at [{1}][{2}]", str, row, colm); } } }

оператор goto служит для передачи управления из вложенной области видимости.

Целью оператора goto case является список операторов в непосредственно объемлющем операторе switch (§8.7.2), который содержит метку case с данным константным значением. Если оператор goto case не содержится ни в одном операторе switch, или если константное_выражение не допускает неявное преобразование (§6.1) в определяющий тип ближайшего объемлющего оператора switch, или если ближайший объемлющий оператор switch не содержит метку case с данным константным значением, возникает ошибка времени компиляции.

Целью оператора goto default является список операторов в непосредственно объемлющем операторе switch (§8.7.2), содержащем метку default. Если оператор goto default не содержится ни в одном операторе switch, или если ближайший объемлющий оператор switch не содержит метку default, возникает ошибка времени компиляции.

Оператор goto не дает возможности выйти из блока finally (§8.10). Если оператор goto встречается внутри блока finally, цель оператора goto должна находиться в том же блоке finally, в противном случае возникнет ошибка времени компиляции.

Оператор goto выполняется следующим образом.

  • Если оператор goto производит выход из одного или нескольких блоков try, с которыми связаны соответствующие блоки finally, управление вначале передается в блок finally самого внутреннего оператора try. Если управление достигает конечной точки блока finally, после этого управление передается в блок finally следующего объемлющего оператора try. Этот процесс повторяется до тех пор, пока не будут выполнены все блоки finally всех сопутствующих операторов try.

  • Управление передается цели оператора goto.

Поскольку оператор goto осуществляет безусловную передачу управления в другое место, конечная точка оператора goto никогда не будет достижима.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]