about_Continue

Krótki opis

Opisuje sposób, w continue jaki instrukcja natychmiast zwraca przepływ programu na początku pętli programu, switch instrukcji lub trap instrukcji.

Długi opis

Instrukcja continue umożliwia zamknięcie bieżącego bloku sterowania, ale kontynuowanie wykonywania, a nie całkowite zamknięcie. Instrukcja obsługuje etykiety. Etykieta to nazwa przypisana do instrukcji w skrypcie.

Korzystanie z funkcji continue in loops

Instrukcja bez etykiet natychmiast continue zwraca przepływ programu forna górę najbardziej wewnętrznej pętli kontrolowanej przez instrukcje , foreach, do, lub while . Bieżąca iteracja pętli jest przerywana, a pętla kontynuuje następną iterację.

W poniższym przykładzie przepływ programu wraca na górę while pętli, jeśli zmienna $ctr jest równa 5. W związku z tym są wyświetlane wszystkie liczby z od 1 do 10 z wyjątkiem 5:

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

    Write-Host -Object $ctr
}

W przypadku używania for pętli wykonywanie jest kontynuowane w <Repeat> instrukcji , a następnie w teście <Condition> . W poniższym przykładzie nieskończona pętla nie wystąpi, ponieważ dekrementowanie $i występuje po słuchu kluczowym 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--
    }
}

Używanie oznaczonej etykietą kontynuowania w pętli

Instrukcja oznaczona etykietą continue kończy wykonywanie iteracji i przekazuje kontrolę do docelowej otaczającej etykiety iteracji lub switch instrukcji.

W poniższym przykładzie najbardziej wewnętrzna for $condition jest przerywana, gdy ma wartość Truefor, a iteracja jest kontynuowana z drugą pętlą o wartości 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
            }
        }
    }
}

Używanie instrukcji continue w instrukcji switch

Instrukcja bez etykiety continue w ramach kończy switch switch switch wykonywanie bieżącej iteracji i przenosi kontrolkę na górę elementu w celu uzyskania następnego elementu wejściowego.

Gdy istnieje jeden element wejściowy, continue kończy działanie całej switch instrukcji. Gdy dane switch wejściowe są kolekcją, testuje switch każdy element kolekcji. Element continue kończy bieżącą iterację, a element switch kontynuuje pracę z następnym elementem.

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

Używanie instrukcji continue w instrukcji pułapki

Jeśli końcowa instrukcja wykonywana w treści to , trap błąd pułapki jest ignorowany w trybie dyskretnym, a trap continuewykonywanie jest kontynuowane wraz z następującą po nim instrukcji, która spowodowała błąd.

Nie używaj funkcji continue poza pętlą, przełącznikiem lub pułapką

Gdy continue jest używany poza konstrukcją, która bezpośrednio go obsługuje (pętle, switch, trap), program PowerShell wyszukuje stos wywołań dla otaczającej konstrukcji. Jeśli nie można znaleźć otaczającej konstrukcji, bieżący obszar działania jest cichy przerywany.

Oznacza to, że funkcje i skryptycontinue, które nieumyślnie używają konstrukcji zewnętrznej, która ją obsługuje, mogą przypadkowo zakończyć swoje wywołujące.

Użycie continue wewnątrz potoku, takiego jak blok ForEach-Object skryptu, nie tylko zamyka potok, ale potencjalnie kończy cały obszar działania.

Zobacz też