Поделиться через


about_Continue

Краткое описание

Описывает, как continue оператор немедленно возвращает поток программы в начало цикла программы, switch оператора или trap оператора.

Подробное описание

Оператор continue предоставляет способ выйти из текущего блока управления, но продолжить выполнение, а не полностью. Оператор поддерживает метки. Метка — это имя, присваиваемое инструкции в скрипте.

Использование продолжения в циклах

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

В следующем примере поток программы возвращается в начало while цикла, если $ctr переменная равна 5. В результате отображаются все числа от 1 до 10, за исключением 5:

while ($ctr -lt 10)
{
    $ctr += 1
    if ($ctr -eq 5)
    {
        continue
    }

    Write-Host -Object $ctr
}

При использовании for цикла выполнение продолжается с помощью инструкции <Repeat> , а затем выполняется <Condition> тест. В приведенном ниже примере бесконечный цикл не будет происходить, так как уменьшение $i происходит после continue ключевое слово.

#   <Init>  <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
    Write-Host -Object $i
    if ($i -eq 5)
    {
        continue
        # Will not result in an infinite loop.
        $i--
    }
}

Использование помеченного продолжения в цикле

Оператор с continue меткой завершает выполнение итерации и передает управление целевой включающей итерации или switch метку оператора.

В следующем примере самый for внутренний завершается, когда $condition имеет значение True, а итерация продолжается со вторым for циклом в .labelB

:labelA for ($i = 1; $i -le 10; $i++) {
    :labelB for ($j = 1; $j -le 10; $j++) {
        :labelC for ($k = 1; $k -le 10; $k++) {
            if ($condition) {
                continue labelB
            } else {
                $condition = Update-Condition
            }
        }
    }
}

Использование continue в инструкции switch

Оператор без метки continue в завершает switch выполнение текущей switch итерации и передает управление в верхнюю часть switch , чтобы получить следующий входной элемент.

При наличии одного входного элемента continue завершается весь switch оператор . switch Если входные данные являются коллекцией, проверяет switch каждый элемент коллекции. Завершает continue текущую итерацию, а switch продолжает работу со следующим элементом.

switch (1,2,3) {
  2 { continue }  # moves on to the next element, 3
  default { $_ }
}
1
3

Использование оператора continue в операторе trap

Если последний оператор, выполняемый trap в теле оператора , является continue, перехватившаяся ошибка игнорируется автоматически и выполнение продолжается с оператором, который сразу же следует за оператором, который вызвал trap возникновение.

Не используйте функцию continue вне цикла, переключателя или ловушки

Если continue используется вне конструкции, которая непосредственно поддерживает его (циклы, switch, trap), PowerShell ищет стек вызовов для включающей конструкции. Если не удается найти включающую конструкцию, текущее пространство выполнения будет тихо завершено.

Это означает, что функции и скрипты, которые непреднамеренно используют continue объект вне включающей конструкции, поддерживающей ее, могут непреднамеренно завершать вызовы.

Использование continue внутри конвейера, например блока скрипта ForEach-Object , не только завершает конвейер, но и может привести к завершению всего пространства выполнения.

См. также раздел