2011-01-05 17 views
9

Ich habe durch einige Beispiel-Quellcode der Suche nach einer Anwendung, die ich verwenden und ich kam in dieser Zeile:Verwendung von "for (;;)" in einer C# -Anwendung?

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

Es sieht aus wie diese eine Endlosschleife zu schaffen ist, aber ich bin nicht vertraut mit " ;; " und es ist leider sehr schwer Google zu finden.

+1

definitives Duplikat [Was für eine C# for-Schleife macht, wenn alle Ausdrücke fehlen.zB für (;;) {}] (http://stackoverflow.com/questions/697307/what-does-ac-for-loop-do-when-all-the-expressions-are-missing-eg-for) – paxdiablo

Antwort

12

Ja, das ist eine Endlosschleife. Es ist eine normale for-Schleife ohne Konditionsausdruck.

Von der documentation for for:

alle Ausdrücke der for-Anweisung sind optional; zum Beispiel wird die folgende Anweisung verwendet, um eine Endlosschleife zu schreiben:

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

Danke, ist es gängige Praxis (IE: Nicht ein Hack?) – JuniorDeveloper1208

+2

Eine Sache zu beachten ist, dass Sie eine Bedingung haben sollten, um daraus zu brechen, eine nicht endende Schleife ist in der Regel schlecht ... @ toleero Es ist eine Frage des Stils. Ich verwende stattdessen lieber die 'while (true) {}' - Schleife, es ist direkter zum Punkt IMO, aber beides ist Standard. –

+1

@ t84 - Ziemlich häufig, obwohl viele 'while (true) {}' für die Lesbarkeit verwenden. – Oded

7

es ist Endlosschleife.

gleich

while (true) { 
} 
0

Interessante Lektüre in diesem Artikel:

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

Diese Art von Code tritt ziemlich viel in Fäden Arbeiter für einige Arbeit warten zu tun. Es ist ein gemeinsamer Code Muster. Der gesamte Code in dem Schleifenkörper ist kritisch. Die "quit Bedingung" muss häufig überprüft werden. Dies bedeutet, dass die zu erledigende Arbeit kurz sein muss. Normalerweise ist dies ein kleinerer Chuck der Arbeit aus dem größeren Satz von Arbeit wurde es gegeben, um zu erreichen.

1

Dies ist das gleiche wie for (<initial>; <condition>; <increment>), Sie lassen nur Anfang, Zustand und Inkrement. In diesem Fall wird die Bedingung immer als wahr betrachtet.

0

Es ist der erste Eintrag in Google, wenn Sie interessiert sind Ich googelte C# for ;; Und bekam diesen Link http://msdn.microsoft.com/en-us/library/ch45axte.aspx Klicken Sie auf C# und Msdn heißt es:

alle Ausdrücke der for-Anweisung sind optional; zum Beispiel wird die folgende Anweisung verwendet, um eine Endlosschleife zu schreiben:

für (;;) { // ... }

1

Ja, es ist eine Endlosschleife.

Alle Parameter im for Anweisung sind optional, und die Bedingung standardmäßig true, so ist es das gleiche wie in:

for (;true;) 

oder:

while (true) 
0

A normal Schleife hat diese Elemente

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

zB

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

Jedes dieser Elemente verzichtet werden kann, und Sie sind mit for(;;) links, die eine Endlos-Schleife ist.

C# specification speziell

erklärt Wenn die for-Bedingung von für Erklärung der weggelassen wird, dann Bewertung der eindeutige Zuordnung erfolgt wie wenn für Anlage wurden mit echten in der obigen ersetzt Erweiterung.

So ist for(;;) die gleiche wie for(;true;)

2

Ich möchte nur klarstellen:

;; ist kein besonderer Operator oder etwas - es ist eine regelmäßige for-Schleife.

regelmäßige for-Schleife sieht so aus:

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

wenn Sie lassen alle 3 Teile leeren Sie ;; - und da Sie keine Exit-Bedingung - das ist eine Endlosschleife.

3

Normalerweise schreiben Sie Ihre Schleife wie folgt aus:

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

Nun, wenn Sie Ihre Schleife wollen unendlich sein, Sie müssen nur entfernen die „int i = 0“, Zustand „i < 10“ und Inkrementierung "i ++". Wenn Sie dies tun, dann werden Sie in einer for-Anweisung nur ";;"

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

Technisch, für die Schleife, um unendlich zu sein, alles, was Sie entfernen müssen, ist die Bedingung (i <10). –

0

Es ist eine gewöhnliche Verwendung der Endlosschleife. Wir verwenden diese Schleife, falls wir nicht wissen, wie oft wir den Code innerhalb der Schleife ausgeführt werden müssen. Daher müssen wir auch eine Bedingung definieren, um aus dieser Schleife herauszukommen. Hier ist ein Beispiel einer langen Nachricht von einem Server empfangen:

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

Und hier können Sie Ihre volle empfangene Nachricht in der Variablen TotalReceivedData gespeichert sind.

Ich habe dieses Beispiel, weil ich auf einen Fall wie diesem kam gerade.

Verwandte Themen