about_Continue

Descrizione breve

Descrive come l'istruzione continue restituisce immediatamente il flusso del programma all'inizio di un ciclo di programma, un'istruzione switch o un'istruzione trap .

Descrizione lunga

L'istruzione continue consente di uscire dal blocco di controllo corrente, ma continuare l'esecuzione anziché uscire completamente. L'istruzione supporta le etichette. Un'etichetta è un nome assegnato a un'istruzione in uno script.

Uso dei cicli continue in

Un'istruzione senza etichetta continue restituisce immediatamente il flusso del programma all'inizio del ciclo più interno controllato da un'istruzione for, foreachdo, o while . L'iterazione corrente del ciclo viene terminata e il ciclo continua con l'iterazione successiva.

Nell'esempio seguente il flusso del programma torna all'inizio del while ciclo se la $ctr variabile è uguale a 5. Di conseguenza, vengono visualizzati tutti i numeri compresi tra 1 e 10, ad eccezione di 5:

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

    Write-Host -Object $ctr
}

Quando si usa un for ciclo, l'esecuzione continua con l'istruzione <Repeat> , seguita dal <Condition> test. Nell'esempio seguente, non si verificherà un ciclo infinito perché il decremento di $i si verifica dopo la continue parola chiave .

#   <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--
    }
}

Uso di un'etichetta continua in un ciclo

Un'istruzione etichettata continue termina l'esecuzione dell'iterazione e trasferisce il controllo all'etichetta di iterazione o switch istruzione di inclusione di destinazione.

Nell'esempio seguente, l'elemento più for interno viene terminato quando $condition è True e l'iterazione continua con il secondo for ciclo in .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
            }
        }
    }
}

Uso di continue in un'istruzione switch

continue Un'istruzione senza etichetta all'interno di un switch termina l'esecuzione dell'iterazione corrente switch e trasferisce il controllo all'inizio di per ottenere l'elemento di switch input successivo.

Quando è presente un singolo elemento continue di input esce dall'intera switch istruzione. Quando l'input switch è una raccolta, verifica switch ogni elemento della raccolta. Esce continue dall'iterazione corrente e continua switch con l'elemento successivo.

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

Uso di continue in un'istruzione trap

Se l'istruzione finale eseguita nel corpo di un'istruzione trap è continue, l'errore intrappolato viene ignorato automaticamente e l'esecuzione continua con l'istruzione immediatamente successiva a quella che ha trap causato l'esecuzione.

Non usare continuare all'esterno di un ciclo, di un interruttore o di un trap

Quando continue viene usato all'esterno di un costrutto che lo supporta direttamente (cicli, switch, trap), PowerShell cerca lo stack di chiamate per un costrutto di inclusione. Se non riesce a trovare un costrutto di inclusione, lo spazio di esecuzione corrente viene terminato in modalità non interattiva.

Ciò significa che funzioni e script che usano inavvertitamente un continue costrutto esterno a un costrutto di inclusione che lo supporta, può terminare inavvertitamente i chiamanti.

L'uso continue all'interno di una pipeline, ad esempio un ForEach-Object blocco di script, non solo esce dalla pipeline, termina potenzialmente l'intero spazio di esecuzione.

Vedi anche