Domanda

In C# (sentitevi liberi di rispondere per le altre lingue) loop, qual è la differenza tra break e continue, come un mezzo per lasciare la struttura del loop, e andare alla prossima iterazione?

Esempio:

foreach (DataRow row in myTable.Rows)
{
    if (someConditionEvalsToTrue)
    {
        break; //what's the difference between this and continue ?
        //continue;
    }
}
È stato utile?

Soluzione

break si esce dal ciclo completamente, continue sarà solo saltare l'iterazione corrente.

Per esempio:

for (int i = 0; i < 10; i++) {
    if (i == 0) {
        break;
    }

    DoSomeThingWith(i);
}

La pausa sarà causare il loop di uscita, alla prima iterazione DoSomeThingWith non verrà mai eseguita.Questo qui:

for (int i = 0; i < 10; i++) {
    if(i == 0) {
        continue;
    }

    DoSomeThingWith(i);
}

Non verrà eseguito DoSomeThingWith per i = 0, ma il ciclo continua e DoSomeThingWith sarà eseguito per i = 1 per i = 9.

Altri suggerimenti

Un modo molto semplice per capire questo è quello di mettere la parola "ciclo" dopo di ciascuna delle parole chiave.I termini ora ha senso se sono solo leggere come frasi di ogni giorno.

break loop - loop è rotto e si ferma.

continue loop - loop continua ad eseguire, con l'iterazione successiva.

pausa cause il contatore di programma per saltare fuori del campo di applicazione del ciclo più interno

for(i = 0; i < 10; i++)
{
    if(i == 2)
        break;
}

Opere come questa

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto BREAK;
}
BREAK:;

continua salta alla fine del ciclo.In un ciclo for, continuare salta all'incremento di espressione.

for(i = 0; i < 10; i++)
{
    if(i == 2)
        continue;

    printf("%d", i);
}

Opere come questa

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto CONTINUE;

    printf("%d", i);

    CONTINUE:;
}

break vorresti fermare il foreach ciclo completamente, continue vorresti passare al prossimo DataRow.

Ho usato per ottenere sempre confuso se devo utilizzare pausa o continuare.Questo è ciò che mi aiuta a ricordare:

Quando usare la pausa vs continuare?

  1. Pausa - è come la rottura.E ' triste, voi ragazzi sono di divisione.

Break

  1. Continua - significa che si sta andando a dare oggi un periodo di riposo e ordinare tutto fuori domani (cioèsaltare la corrente iterazione)!

Continue

Ci sono più di un paio di persone che non amano break e continue.L'ultima denuncia che ho visto su di loro JavaScript:Le Parti Buone da Douglas Crockford.Ma trovo che a volte utilizzando uno di loro in realtà semplifica le cose, soprattutto se la vostra lingua non includono una do-while o do-until stile di loop.

Io tendo ad usare break in cicli che sono alla ricerca di un elenco di qualcosa.Una volta trovato, non c'è nessun punto in continua, quindi si potrebbe anche chiudere.

Io uso continue quando si fa qualcosa con la maggior parte degli elementi di una lista, ma ancora voglia di saltare un paio di.

Il break la dichiarazione, inoltre, è utile quando si esegue il polling per una valida risposta da qualcuno o da qualcosa.Invece di:

Ask a question
While the answer is invalid:
    Ask the question

Si potrebbe eliminare duplicazioni e utilizzare:

While True:
    Ask a question
    If the answer is valid:
        break

Il do-until loop che ho detto prima, è la soluzione più elegante per quel particolare problema:

Do:
    Ask a question
    Until the answer is valid

Nessuna duplicazione, e non break necessario sia.

Tutti hanno dato una spiegazione molto bene.Io sono ancora postare la mia risposta solo per fare un esempio, se può essere di aiuto.

// break statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        break; // It will force to come out from the loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

Ecco l'output:

0[La Stampa] 1[La Stampa] 2[La Stampa]

3[la stampa] E 4[la stampa] non sarà visualizzato come non c'è pausa quando i == 3

//continue statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        continue; // It will take the control to start point of loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

Ecco l'output:

0[La Stampa] 1[La Stampa] 2[La Stampa] 4[La Stampa]

3[la stampa] non sarà visualizzato come c'è continua quando i == 3

Pausa

Rompere le forze di un ciclo di uscire immediatamente.

Continua

Questo fa il contrario di pausa.Invece di terminare il ciclo, immediatamente loop di nuovo, ignorando il resto del codice.

L'esempio

foreach(var i in Enumerable.Range(1,3))
{
    Console.WriteLine(i);
}

Stampe 1, 2, 3 (su righe separate).

Aggiungere una condizione di interruzione per i = 2

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        break;

    Console.WriteLine(i);
}

Ora il ciclo delle stampe 1 e si ferma.

Sostituire la rottura con una continua.

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        continue;

    Console.WriteLine(i);
}

Ora per un ciclo di stampe 1 e 3 (saltando 2).

Così, break interruzione del ciclo, mentre continue salta all'iterazione successiva.

Ruby, purtroppo, è un po ' diverso.PS:La mia memoria è un po ' confuso in questo modo mi scuso se ho sbagliato

invece di pausa/continuare, ha pausa/brano successivo, che si comportano allo stesso in termini di cicli

Loop (come tutto il resto) sono espressioni e "restituire" l'ultima cosa che hanno fatto.La maggior parte del tempo, ottenendo il valore di ritorno da un ciclo è inutile, così che ognuno fa solo questo

a = 5
while a < 10
    a + 1
end

Tuttavia, è possibile fare questo

a = 5
b = while a < 10
    a + 1
end # b is now 10

TUTTAVIA, un sacco di codice ruby 'emula' un loop utilizzando un blocco.L'esempio canonico è

10.times do |x|
    puts x
end

In quanto è molto più comune per le persone a voler fare le cose con il risultato di un blocco, questo è dove ottiene disordinato.pausa/avanti significare cose diverse in un contesto di blocco.

pausa salterà fuori il codice che chiama il blocco

la prossima salterà il resto del codice nel blocco, e 'di ritorno' quello che è specifica per il chiamante di blocco.Questo non ha alcun senso senza esempi.

def timesten
    10.times{ |t| puts yield t }
end


timesten do |x|
   x * 2
end
# will print
2
4
6
8 ... and so on


timesten do |x|
    break
    x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped

timesten do |x|
    break 5
    x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5

timesten do |x|
    next 5
    x * 2
end 
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.

Così sì.Ruby è impressionante, ma ha qualche terribile angolo casi.Questa è la seconda peggiore che ho visto nei miei anni di utilizzo :-)

Risposta semplice:

Pausa termina il ciclo immediatamente.
Continua inizia l'elaborazione della voce successiva.(Se ci sono, saltando per la valutazione di linea per/tempo)

Per favore, mi permetta di affermare l'ovvio:si noti che l'aggiunta né rompere né continuare, riprendere il programma;cioèHo bloccato per un certo errore, poi, dopo la registrazione, ho voluto riprendere l'elaborazione, e ci sono stati più di codice compiti tra la riga successiva, così ho appena lasciato cadere attraverso.

Per rompere completamente al di fuori di un ciclo foreach, pausa è utilizzato;

Per passare alla successiva iterazione del ciclo, continua è utilizzato;

Pausa è utile se hai un ciclo attraverso una collezione di Oggetti (come le Righe in un Datatable) e si sta cercando per una partita particolare, quando si scopre che partita, non c'è bisogno di continuare con le rimanenti righe, in modo che si desidera uscire.

Continua è utile quando si hanno compiuto ciò che è necessario in lato una iterazione del ciclo.Di solito hanno continua dopo un se.

se non si desidera utilizzare pausa basta aumentare il valore di I in modo tale da rendere iterazione la condizione e ' falsa e ciclo non viene eseguito sul iterazione successiva.

for(int i = 0; i < list.Count; i++){
   if(i == 5)
    i = list.Count;  //it will make "i<list.Count" false and loop will exit
}

Come per le altre lingue:

'VB
For i=0 To 10
   If i=5 then Exit For '= break in C#;
   'Do Something for i<5
next

For i=0 To 10
   If i=5 then Continue For '= continue in C#
   'Do Something for i<>5...
Next
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top