Udostępnij za pośrednictwem


about_Continue

Krótki opis

Opisuje sposób continue natychmiastowego zwracania przepływu programu w górnej części pętli programu, switch instrukcji lub trap instrukcji.

Długi opis

Instrukcja continue zapewnia sposób zakończenia bieżącego bloku sterowania, ale kontynuowania wykonywania, a nie całkowitego zakończenia. Instrukcja obsługuje etykiety. Etykieta to nazwa przypisana do instrukcji w skrycie.

Używanie kontynuacji w pętlach

Instrukcja unlabeled continue natychmiast zwraca przepływ programu do góry najbardziej wewnętrznej pętli kontrolowanej przez instrukcję for, foreach, dolub while . Bieżąca iteracja pętli jest przerywana, a pętla będzie kontynuowana przy następnej iteracji.

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

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

    Write-Host -Object $ctr
}

W przypadku korzystania z for pętli wykonywanie jest kontynuowane w instrukcji <Repeat> , a następnie <Condition> test. W poniższym przykładzie pętla nieskończona nie zostanie wykonana, ponieważ dekrementacja $i występuje po słowie continue kluczowym.

#   <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 etykiety kontynuuj w pętli

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

W poniższym przykładzie najbardziej for wewnętrzny jest przerywany, gdy $conditionjest true, a iteracja kontynuuje drugą for pętlę na .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 nieoznakowana continue w ramach switch zakończenia wykonywania bieżącej switch iteracji i transferuje kontrolkę do góry switch elementu w celu pobrania następnego elementu wejściowego.

Gdy istnieje pojedynczy element continue wejściowy, kończy całą switch instrukcję. switch Gdy dane wejściowe są kolekcją, testuje switch każdy element kolekcji. Element continue kończy bieżącą iterację i switch kontynuuje działanie przy użyciu następnego elementu.

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

Używanie instrukcji kontynuuj w pułapce

Jeśli ostateczna instrukcja wykonana w treści trap instrukcji to continue, uwięziony błąd jest dyskretnie ignorowany i wykonywanie będzie kontynuowane z instrukcją bezpośrednio po instrukcji, która spowodowała trap wystąpienie.

Nie należy używać kontynuacji poza pętlą, przełącznikiem lub pułapką

Gdy continue jest używany poza konstrukcją, która bezpośrednio ją obsługuje (pętle, switch, trap), program PowerShell wyszukuje stos wywołań dla konstrukcji otaczającej. Jeśli nie można odnaleźć otaczającej konstrukcji, bieżąca przestrzeń uruchamiania jest po cichu zakończona.

Oznacza to, że funkcje i skrypty, które przypadkowo używają continue zewnętrznej konstrukcji otaczającej, która ją obsługuje, mogą przypadkowo zakończyć ich rozmówców.

Użycie continue wewnątrz potoku, takiego jak ForEach-Object blok skryptu, nie tylko kończy potok, ale potencjalnie kończy całą przestrzeń uruchamiania.

Zobacz też