Pergunta

Em C# (sinta-se livre para responder para outros idiomas) loop, qual é a diferença entre ruptura e continuar como um meio para deixar a estrutura do loop, e vá para a próxima iteração?

Exemplo:

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

Solução

break vai sair do loop completamente, continue só vai pular a iteração atual.

Por exemplo:

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

    DoSomeThingWith(i);
}

O break fará com que o loop para sair na primeira iteração - DoSomeThingWith nunca será executada.Este aqui:

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

    DoSomeThingWith(i);
}

Não será executado DoSomeThingWith para i = 0, mas o loop continuar e DoSomeThingWith será executada para i = 1 para i = 9.

Outras dicas

Uma forma muito fácil de entender isso é colocar a palavra "loop" depois de cada uma das palavras-chave.Os termos agora faz sentido se eles são apenas de leitura como diário frases.

break loop - loop é quebrado e pára.

continue loop - loop continua a executar com a próxima iteração.

quebra faz com que o contador de programa para saltar fora do escopo do loop mais interno

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

Funciona assim

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

continuar salta para o fim do loop.Em um loop for, continue salta para o incremento de expressão.

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

    printf("%d", i);
}

Funciona assim

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

    printf("%d", i);

    CONTINUE:;
}

break gostaria de parar o foreach loop completamente, continue gostaria de passar para o próximo DataRow.

Eu costumava sempre ficar confuso se devo usar quebrar, ou continuar.Isso é o que me ajuda a lembrar:

Quando usar quebrar vs continuar?

  1. Quebra - é como se quebrando.É triste, vocês são os cortes.

Break

  1. Continuar - significa que você vai dar, hoje, um resto de classificação e de tudo para amanhã (i.e.pular a iteração atual)!

Continue

Há mais do que algumas pessoas que não gostam de break e continue.A última queixa que eu vi sobre eles era em JavaScript:As Partes Boas por Douglas Crockford.Mas eu acho que, às vezes, usando um deles realmente simplifica as coisas, especialmente se o seu idioma não inclui do-while ou do-until estilo do loop.

Eu tendem a usar break em loops que estão procurando uma lista para algo.Uma vez encontrado, não há nenhum ponto em continuar, então você pode muito bem sair.

Eu uso continue ao fazer algo com a maioria dos elementos de uma lista, mas ainda quer saltar por cima de alguns.

O break declaração também é útil quando a pesquisa para uma resposta válida a partir de alguém ou de algo.Em vez de:

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

Você pode eliminar alguns duplicação e uso:

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

O do-until loop que eu mencionei antes, é a solução mais elegante para esse problema:

Do:
    Ask a question
    Until the answer is valid

Sem duplicação, e não break necessários.

Todos deram uma boa explicação.Eu ainda estou postando a minha resposta só para dar um exemplo que se pode ajudar.

// 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] ";
}

Aqui está o resultado:

0[Impresso] 1[Impresso] 2[Impresso]

Então 3[Impresso] E 4[Impresso] não irá ser exibido como há quebra 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] ";
}

Aqui está o resultado:

0[Impresso] 1[Impresso] 2[Impresso] 4[Impresso]

Então 3[Impresso] não irá ser exibido como há de continuar quando i == 3

Quebra

Quebrar as forças de um loop para sair imediatamente.

Continuar

Este é o oposto do break.Em vez de terminar o ciclo, imediatamente loops novamente, ignorando o restante do código.

Por exemplo

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

Imprime 1, 2, 3 (em linhas separadas).

Adicionar uma quebra de condição em i = 2

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

    Console.WriteLine(i);
}

Agora o ciclo imprime 1 e pára.

Substituir a ruptura com um continue.

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

    Console.WriteLine(i);
}

Agora loop imprime 1 e 3 (pular 2).

Assim, break interrompe o ciclo, enquanto continue pula para a próxima iteração.

Ruby, infelizmente, é um pouco diferente.PS:A minha memória está um pouco nebulosa de tal modo desculpas se eu estou errado

em vez de pausa/continuar, ele tem quebra de/ao lado, que se comportam da mesma em termos de loops

Loops (como tudo o mais) são expressões, e "devolver" a última coisa que eles fizeram.A maior parte do tempo, obtendo o valor de retorno de um ciclo é inútil, para que todos só faz isso

a = 5
while a < 10
    a + 1
end

No entanto, você pode fazer isso

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

No ENTANTO, um monte de ruby código "emula" um ciclo através da utilização de um bloco.O exemplo canônico é

10.times do |x|
    puts x
end

Como é muito mais comum que as pessoas querem fazer as coisas com o resultado de um bloco, este é o lugar onde ele fica confuso.break/próxima significar coisas diferentes no contexto de um bloco.

de quebra vai saltar para fora do código que chamou o bloco

próximo irá saltar o resto do código no bloco, e 'return' o que você especificar para o chamador do bloco.Isso não faz qualquer sentido, sem exemplos.

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.

Então, sim.Ruby é incrível, mas tem alguns terríveis canto-casos.Esta é a segunda pior que eu já vi em meus anos de utilização :-)

Resposta simples:

Quebra sai do loop imediatamente.
Continuar inicia o processamento do próximo item.(Se as houver, saltando para a avaliação da linha do for/while)

Por favor, deixe-me dizer o óbvio:observe que a adição de nem quebrar, nem continuar, vai retomar o seu programa;i.e.Eu preso por um determinado erro, em seguida, depois de iniciar a sessão, eu queria retomar o processamento, e que havia mais tarefas de código entre a linha seguinte, então eu simplesmente deixá-lo cair.

Para quebrar completamente fora de um loop foreach, quebra é utilizado;

Para ir para a próxima iteração do loop, continuar é utilizado;

Quebra é útil se você está loop através de uma coleção de Objetos (como Linhas em um Datatable) e você estiver procurando por um jogo em particular, quando você encontrar o que corresponde, não há necessidade de continuar as restantes linhas, de modo que você deseja quebrar.

Continuar é útil quando você tem feito o que você precisa no lado de uma iteração do loop.Você vai ter normalmente continuar depois de uma se.

se você não quiser usar quebra você acabou de aumentar o valor de I de tal maneira que ele fazer iteração condição falsa e o loop não será executado na próxima iteração.

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
}

Como para outros idiomas:

'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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top