Iterationsanweisungen: für, foreach, tun und while (2024)

  • Artikel

Iterationsanweisungen führen wiederholt einen Befehls- oder Anweisungsblock aus.DerAnweisung für: führt Ihren Körper aus, während ein bestimmter boolescher Ausdruck als bewertet wirdWAHR.DerForeach Anweisung: Listen Sie die Elemente einer Sammlung auf und führen Sie Ihren Körper für jedes Element der Sammlung aus.DerMaßgeblich do: Führt Ihren Körper bedingt ein oder mehrmals aus.Derwhile-Anweisung: Führen Sie Ihren Körper bedingt Null oder mehrmals.

Zu jedem Zeitpunkt auf dem Körper einer Iterationsanweisung können Sie mittels der Schleife aus der Schleife herauskommenUnterricht brechen. Mit können Sie Schritt für Schritt zur nächsten Iteration der Schleife gelangenFortsetzung der Anweisung.

Anweisungfür

Die Anleitungfürführt eine Anweisung oder einen Anweisungsblock aus, während ein angegebener boolescher Ausdruck als ausgewertet wirdWAHR.Das folgende Beispiel zeigt die AnweisungfürDas betreibt Ihren Körper, während ein ganzer Buchhalter weniger als drei ist:

für (int i = 0; i <3; i ++) {console.write (i);} // output: // 012

Das vorherige Beispiel zeigt die Elemente der Anweisungfür:

  • Die SektionStiefel, das läuft nur einmal, bevor er in die Schleife eintritt.Normalerweise wird in diesem Abschnitt eine lokale Schleifenvariable deklariert und initialisiert.Sie können nicht auf die von außerhalb der Anweisung deklarierte Variable zugreifenfür.

    Die SektionStartprogrammdes vorherigen Beispiels deklariert und initialisiert eine gesamte Buchhaltervariable:

    int i = 0
  • Die SektionZustandDies bestimmt, ob die nächste Schleife -Iteration ausgeführt werden muss.Wenn bewertet wieWAHROder es ist nicht vorhanden, die folgende Iteration wird ausgeführt;Ansonsten steigen Sie aus der Schleife.Die SektionZustandEs muss ein boolescher Ausdruck sein.

    Die SektionZustandÜberprüfen Sie aus dem vorherigen Beispiel, ob ein Zählerwert weniger als drei beträgt:

    i <3
  • Die SektionIterator, das definiert, was nach jeder Iteration des Körpers der Schleife passiert.

    Die SektionIteratorDas vorherige Beispiel erhöht den Buchhalter:

    i ++
  • Der Körper der Schleife, eine Anweisung oder ein Anweisungsblock.

Der Iteratorabschnitt kann null oder mehr der folgenden Anweisungsausdrücke enthalten, die durch Comas getrennt sind:

  • Ausdruck vonErweiterungvon Präfix oder Suffix wie++ iÖi ++
  • Ausdruckverringernvon Präfix oder Suffix wie--ichÖich--
  • Abtretung
  • Aufruf einer Methode
  • Warten Sie den Ausdruck
  • Schaffung eines Objekts durch dieneuer Betreiber.

Wenn Sie im Abschnitt "Initialisierungsabschnitt keine Schleifenvariable" deklarieren, können Sie auch Null oder einige der Ausdrücke der vorherigen Liste des Abschnitts verwenden.Im folgenden Beispiel werden mehrere weniger häufige Verwendungen der Anfangs- und Iteratorabschnitte angezeigt: Weisen Sie im Abschnitt "Initialisierungsabschnitt eine externe Variable" zu einem Wert zu, rufen Sie eine Methode in den Abschnitten für Initialisierungs- und Iterator auf und ändern Sie die Werte von zwei Variablen in Der Iterator -Abschnitt:

int i; int j = 3; für (i = 0, console.writeLine ($ "start: i = {i}, j = {j}"); i 

Alle AnweisungsabschnittefürSie sind optional.Im Beispiel definiert der folgende Code die Schleifefürunendlich:

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

Anweisungfür jede

Die Anleitungfür jedeFühren Sie für jedes Element einer Instanz des Typs einen Anweisungs- oder Anweisungsblock aus, der die Schnittstelle implementiertSystem.Collections.IenumerableÖSystem.Collectionss.generic.Ienumerable , wie im folgenden Beispiel gezeigt:

var fibnumbers = Neue Liste  {0, 1, 1, 2, 3, 5, 8, 13}; foreach (intelement in fibnumbers) {console.write ($ "{{Element}");} // Ausgabe: // 0 1 1 2 3 5 8 13

Die Anleitungfür jedeEs ist nicht auf diese Typen beschränkt.Sie können es mit einer Instanz jeglicher Art verwenden, die den folgenden Bedingungen erfüllt:

  • Ein Mann hat die öffentliche MethodeGetenumeratorKeine Parameter.Aus C#9.0 die MethodeGetenumeratorEs kann er seinErweiterungsmethodeeines Mannes.
  • Die Art des Wertes, der aus der Methode zurückgegeben wurdeGetenumeratorhat öffentliches EigentumAktuellund die öffentliche MethodeMoveNextohne Parameter, deren Rückgabetyp istbool.

Im folgenden Beispiel wird die Anweisung verwendetfür jedeMit einer Instanz des TypsSystem.span , was keine Schnittstelle implementiert:

Span  numbers = new int [] {3, 14, 15, 92, 6}; foreach (int number in nummern) {console.write ($ "{number}");} // output: // 314 15 92 6

Wenn die EigenschaftAktuelldes Enumerators gibt a zurückReferenzwert(Ref tWoTEs ist die Art eines Sammelelements), Sie können eine Iterationsvariable mit dem Modifikator deklarierenRefÖRef Readonly, wie im folgenden Beispiel gezeigt:

Span  storate = stackalloc int [10]; int num = 0; foreach (ref int item in speicher) {item = num ++;} foreach (ref readonly var item in speicher) {console.write ($ "{item}}");} // Ausgabe: // 0 1 2 3 4 5 6 7 8 9

Wenn die Herkunftssammlung der Anweisungfür jedeist leer, der Körper des Unterrichtsfür jedewird nicht ausgeführt und übersprungen. Wenn die Anweisungfür jedegilt fürNull, se produzierenNullReferencexception.

warte auf nach

Sie können Anweisungen verwendenwarte auf jedenUm einen asynchronen Datenfluss zu konsumieren, dh die Art der Sammlung, die die Schnittstelle implementiertIasyncenumerable .Jede Schleife -Iteration kann suspendiert werden, während das nächste Element asynchron wiederhergestellt wird.Das folgende Beispiel zeigt, wie die Anweisung verwendet wirdwarte auf nach:

Warten Sie auf (var item in generateSequenceasync ()) {console.writeLine (item);};}

Sie können auch Anweisungen verwendenwarte auf nachMit einer Instanz jeglicher Art, die den folgenden Bedingungen erfüllt:

  • Ein Mann hat die öffentliche MethodeGetaSyncenumeratorKeine Parameter.Diese Methode kann die seinErweiterungsmethodeTyp.
  • Die Art des Wertes, der aus der Methode zurückgegeben wurdeGetaSyncenumeratorhat öffentliches EigentumAktuellund die öffentliche MethodeMOVENEXTASYNCKeine Parameter, deren Werttyp zurückgegeben wirdAufgabe AnwesendValuetask , oder jeder andere Typ, der zu erwarten ist, dessen MethodeGetResultEs kehrt auf einen Wert zurückbool.

Die Sequenzelemente werden standardmäßig im erfassten Kontext verarbeitet.Wenn Sie die Kontextaufnahme deaktivieren möchten, verwenden Sie die ErweiterungsmethodeTaskaSyncenumerableAxextensions.ConfigureAwait.Weitere Informationen zu Synchronisationskontexten und der Erfassung des aktuellen Kontexts finden Sie inVerwenden Sie das asynchrone aufgabenbasierte Modell.Weitere Informationen zu asynchronen Sequenzen finden Sie unterAsynchrone Sequenzen Tutorial.

Art einer Iterationsvariablen

Du kannst den ... benutzenSchlüsselwort varDamit dem Compiler den Typ einer Iterationsvariablen für Anweisungen schließen kannfür jede, wie im folgenden Code gezeigt:

foreach (var item in collection) {}

Sie können den Typ einer Iterationsvariablen auch explizit angeben, wie im folgenden Code gezeigt:

IEnumerable  Sammlung = new t [5]; foreach (v item in collection) {}

In der vorherigen Form der TypTVon einem Sammelelement muss es in der Lage sein, implizit oder explizit in den Typ umgewandelt zu werdenVeiner Iterationsvariablen.Wenn ein Fehler in einer expliziten Umwandlung von auftrittTInVIn der Ausführungszeit Anweisungfür jedeproduzierenInvalidCastException.Zum Beispiel jaTEs ist eine Art ungeweihter Klasse,VEs kann jede Art von Schnittstelle sein, auch eine, dieTNicht implementiert.In der Ausführungszeit kann der Typ eines Sammelelements derjenige sein, aus dem abgeleitet istTUnd es impliziert wirklich wirklichV.Wenn dies nicht der Fall ist, tritt dies aufInvalidCastException.

AnweisungTun

Die AnleitungTunführt einen Anweisungen oder einen Befehlsblock aus, während ein bestimmter boolescher Ausdruck als bewertet wirdWAHR. Da dieser Ausdruck nach jeder Ausführung der Schleife ausgewertet wird, handelt es sich um eine SchleifeTunwird einmal oder mehrmals ausgeführt. SchleifeTununterscheidet sich vonbucle während, das wird null oder mehrmals ausgeführt.

Das folgende Beispiel zeigt die Verwendung der AnweisungTun:

int n = 0; do {console.write (n);n ++;} while (n <5); // Ausgabe: // 01234

Anweisungwährend

Die Anleitungwährendführt einen Anweisungen oder einen Befehlsblock aus, während ein bestimmter boolescher Ausdruck als bewertet wirdWAHR. Da dieser Ausdruck vor jeder Ausführung der Schleife ausgewertet wird, handelt es sich um eine SchleifewährendEs läuft Null oder mehrmals.Schleifewährendunterscheidet sich vonBucle tun, das wird ein oder mehrmals ausgeführt.

Das folgende Beispiel zeigt die Verwendung von Anweisungen anwährend:

int n = 0;while (n < 5){ Console.Write(n); n++;}// Ausgabe:// 01234

C# Sprachspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten derC# Sprachspezifikation:

  • Die Anweisung für
  • Die foreach-Anweisung
  • Die Anweisung
  • Während der Anweisung

Weitere Informationen zu den in C#8.0 und nachfolgenden Versionen hinzugefügten Eigenschaften finden Sie in den folgenden Vorschlägen:

  • Asynchrone Flüsse (C#8.0)
  • Kompatibilität mit Genuumerator -Erweiterungen für Foreach Lokels (C#9.0)

Auch sehen

  • C# Referenz
  • Verwenden Sie mit Matrices foreach
  • Iteratoren
Iterationsanweisungen: für, foreach, tun und while (2024)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Kareem Mueller DO

Last Updated:

Views: 6157

Rating: 4.6 / 5 (66 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Kareem Mueller DO

Birthday: 1997-01-04

Address: Apt. 156 12935 Runolfsdottir Mission, Greenfort, MN 74384-6749

Phone: +16704982844747

Job: Corporate Administration Planner

Hobby: Mountain biking, Jewelry making, Stone skipping, Lacemaking, Knife making, Scrapbooking, Letterboxing

Introduction: My name is Kareem Mueller DO, I am a vivacious, super, thoughtful, excited, handsome, beautiful, combative person who loves writing and wants to share my knowledge and understanding with you.