2011-01-05 1 views
9

Ho cercato attraverso qualche codice sorgente di esempio per un'applicazione che uso e mi sono imbattuto in questa linea:Uso di "for (;;)" in un'applicazione C#?

for (;;) 
{ 
// The rest of the application's code 
} 

Sembra che questo è quello di creare un ciclo infinito, ma io non sono a conoscenza " ;;" ed è molto difficile per Google, sfortunatamente.

+1

duplicato preciso di [Cosa fa un ciclo C# per quando mancano tutte le espressioni.ad esempio per (;;) {}] (http://stackoverflow.com/questions/697307/what-does-ac-for-loop-do-when-all-the-expressions-are-missing-eg-for) – paxdiablo

risposta

12

Sì, questo è un ciclo infinito. È un ciclo for ordinario senza espressione condizionale.

Dal documentation for for:

Tutte le espressioni dell'istruzione for sono opzionali; per esempio, la seguente dichiarazione viene utilizzato per scrivere un ciclo infinito:

for (; ;) 
{ 
    // ... 
} 
+0

Grazie, è una pratica comune (IE: Non è un trucco?) – JuniorDeveloper1208

+2

Una cosa da notare è che dovresti avere una condizione su cui interromperlo, per avere un ciclo non-finale di solito è male ... @toleero , è una questione di stile. Mi piace usare il ciclo 'while (true) {}' invece, è più diretto al punto IMO, ma uno è una pratica standard. –

+1

@ t84 - Abbastanza comune, anche se molti usano 'while (true) {}' per la leggibilità. – Oded

7

è loop infinito.

pari a

while (true) { 
} 
0

lettura interessante in questo articolo:

http://csharpdevelop.blogspot.com/2004/05/writing-infinite-loop.html

Questo tipo di codice si verifica un po ' nel thread di lavoro in attesa di qualche lavoro da fare. È un codice comune modello. Tutto il codice nel corpo di istruzioni di loop è fondamentale. La "condizione di chiusura dello " deve essere controllata frequentemente. Questo implica che il lavoro da fare deve essere abbreviato. Di solito questo è un mandrino di lavoro più piccolo della serie più grande di lavoro che è stato dato per realizzare.

1

Questo è lo stesso di for (<initial>; <condition>; <increment>), stai semplicemente omettendo l'iniziale, la condizione e l'incremento. In questo caso, la condizione sarà sempre considerata vera.

0

È la prima voce in google se ti interessa googled C# for ;; E preso questo link http://msdn.microsoft.com/en-us/library/ch45axte.aspx Clicca C# e MSDN afferma:

Tutte le espressioni della istruzione for sono opzionali; per esempio, la seguente dichiarazione viene utilizzato per scrivere un ciclo infinito:

per (;;) { // ...}

1

Sì, è un ciclo infinito.

Tutti i parametri della dichiarazione for sono opzionali, e la condizione di default true, quindi è lo stesso di:

for (;true;) 

o:

while (true) 
0

Un normale ciclo for ha questi elementi

for (for-initializer ; for-condition ; for-iterator) embedded-statement 

es.

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

Uno qualsiasi di questi elementi possono essere omessi, e si è lasciato con for(;;), che è un ciclo infinito.

Il linguaggio C# specification afferma esplicitamente

Se la per la condizione viene omesso dalla for, allora la valutazione di proventi di assegnazione definiti come se per condizione sono stati sostituiti con vera in quanto sopra espansione.

Quindi, for(;;) è lo stesso di for(;true;)

2

Voglio solo chiarire:

;; non è un operatore di speciale o qualcosa - è un normale ciclo for.

normale ciclo for si presenta così:

for (do_before_loop**;** finish_loop_when_this_condition_is_false**;** do_after_each_iteration);

se si lascia tutte le 3 parti svuotano si ottiene ;; - e dal momento che non si dispone di una condizione di uscita - questo è un ciclo infinito.

3

Normalmente si scrive il ciclo in questo modo:

for (int i = 0; i < 10; i++) 
{ 
// The rest of the application's code 
} 

Ora, quando si desidera che il ciclo per essere uno infinita, Non vi resta che rimuovere il "int i = 0", la condizione "i < 10" e incremento "i ++". Se lo fai, allora in una dichiarazione for vedrai solo ";;"

for (;;) 
{ 
// The rest of the application's code 
} 
+1

Tecnicamente, perché il loop sia infinito, tutto ciò che devi rimuovere è la condizione (i <10). –

0

È un uso normale del ciclo infinito. Usiamo questo ciclo nel caso in cui non sappiamo quante volte abbiamo bisogno di eseguire il codice all'interno del ciclo. Quindi dobbiamo definire anche una condizione per uscire da questo ciclo. Ecco un esempio di ricevere un lungo messaggio da un server:

for (;;) 
{ 
    //Receive the maximum allowed size of the message 
    //Save(Concatenate) the received data in a variable (TotalReceivedData) 
    // If the length of the received part of the message is equal to zero , break the operation 
    //<Break the loop>if(message.length == 0){break;}</Break the loop> 
} 

E qui è possibile utilizzare il messaggio completo ricevuto memorizzato nella TotalReceivedData variabile.

Ho aggiunto questo esempio perché ho appena trovato un caso come questo.