2010-05-14 10 views
7

Kürzlich habe ich in einem Buch diesen Code gelesen. Können Sie die Mittel dieses Codes definieren und wie dieser Code funktioniert?Wie funktioniert diese Schleife in C#

int i = 0; 
for (; i != 10;) 
{ 
    Console.WriteLine(i); 
    i++; 
} 
+0

Interessant, nicht gesehen, dass vor ... – Yoda

+0

@Yoda - Wahrscheinlich, weil seine schlechten Form. Legale, aber schlechte Form. –

+0

Überrascht, Sie haben keine Upvotes für diese Frage. +1 für die Rückkehr zu den Grundlagen. –

Antwort

13

Es schleift.

Da Sie bereits i=0 oben festgelegt haben, haben sie diesen Abschnitt der for Schleife weggelassen. Da Sie die Variable am Ende inkrementieren, haben sie das auch weggelassen.

Sie haben im Grunde nur eine for-Schleife in eine while-Schleife verwandelt.

Es wäre wahrscheinlich mehr elegant sein wie:

int i = 0; 
while(i != 10) 
{ 
    Console.WriteLine(i); 
    i++; 
} 
+2

sowie initialisieren i außerhalb der Schleife, um es einen größeren Bereich zu geben, ermöglicht es auch die Incrementor zu einem Zustand innerhalb der Schleife, z. i + = 2 oder i-- oder etwas, ohne das kompensieren zu müssen, was im dritten Teil der for-Schleife angegeben wurde. Aber ja, das gleiche wie eine Weile denke ich – Jacob

+0

@Jacob, +1 für den Umfang zu fangen, ich habe nicht einmal darüber nachgedacht. –

1

Wenn es einfacher ist, in Normalform, um zu sehen, es ist fast entspricht dies:

for (int i = 0; i != 10; i++) 
{ 
    Console.WriteLine(i); 
} 

Mit der Ausnahme, dass es läßt i verfügbar für Benutzer nach der Schleife abgeschlossen ist, ist es nicht nur auf die for Schleife beschränkt.

1

Es ist das gleiche wie dieser Schleife:

for (int i = 0; i != 10; i++) { 
    Console.WriteLine(i); 
} 

Mit Ausnahme der variable i außerhalb der Schleife deklariert wird, so ist es Spielraum größer ist.

In einer for Schleife ist der erste Parameter die Initialisierung, der zweite ist die Bedingung und der dritte ist das Inkrement (was eigentlich alles sein kann). Das Buch zeigt, wie die Initalisierung und das Inkrement an die Stelle im Code verschoben werden, an der sie tatsächlich ausgeführt werden. Die Schleife kann auch als die äquivalente while Schleife dargestellt werden:

int i = 0; 
while (i != 10) { 
    Console.WriteLine(i); 
    i++; 
} 

hier die Variable i auch außerhalb der Schleife deklariert wird, so dass der Umfang größer ist.

1

Sie verwenden „für“, wie ein „während“

1

könnte Dieser Code neu geschrieben werden (im Zusammenhang mit dem Code-Snippet - es ist nicht äquivalent ist, wie angegeben.) Als:

for (int i = 0; i != 10; i++) 
    Console.WriteLine(i); 

Im Grunde wurden der Initialisierungsausdruck und der Inkrementausdruck aus dem for-Schleifenausdruck herausgenommen, die rein optional sind.

+0

Ich würde anmerken, dass das, was Sie gepostet haben, nicht * äquivalent * ist, es gibt einen Unterschied bei den Scopings. –

+0

Danke @Nick, bearbeitet nach Ihrem Vorschlag. –

0

Es ist die gleiche wie:

for (int i = 0; i != 10; i++) { 
    Console.WriteLine(i); 
} 

Bitte nicht schreiben Code so. Es ist nur hässlich und vereitelt den Zweck von for-Schleifen.

2

Die für die Anweisung in der C# spec als

definiert (for-Initialisierer; für Bedingungs; for-Iterator) embedded-Anweisung

Alle drei von For-Initialisierer, für-Bedingung, ein d for-iterator sind optional. Der Code funktioniert, weil diese Teile nicht benötigt werden.

Für die Neugierigen: Wenn für Anlage weggelassen wird, verhält sich die Schleife, als wäre es eine für Anlage war die wahr ergab. So würde es als Endlosschleife handeln, eine Sprunganweisung erfordern verlassen (Pause, goto, Wurf oder Rückkehr).

0

Da int i oben deklariert wurde, war es nicht in der for-Schleife. das ist ganz wie

for(int i = 0; i!=10; i++) 
{ 
    /// do your code 
} 
Verwandte Themen