Iteratoren
Wichtig Dieses Dokument enthält ggf. nicht die bewährten Methoden für die aktuelle Entwicklung. Außerdem sind Links zu Downloads und anderen Ressourcen u. U. nicht mehr gültig. Die aktuell empfohlene Version finden Sie hier. ArchiveDisclaimer

Iteratoren (C#-Programmierhandbuch)

Iteratoren sind ein neues Feature in C# 2.0. Ein Iterator ist eine Methode, ein get-Accessor oder ein Operator, mit dem Sie die foreach-Iteration in einer Klasse oder Struktur unterstützen können, ohne die gesamte IEnumerable-Schnittstelle implementieren zu müssen. Stattdessen stellen Sie lediglich einen Iterator bereit, der einfach die Datenstrukturen in der Klasse durchläuft. Wenn der Compiler den Iterator erkennt, generiert er automatisch die Methoden Current, MoveNext und Dispose der IEnumerable-Schnittstelle oder IEnumerable<T>-Schnittstelle.

Übersicht über Iteratoren

  • Ein Iterator ist ein Codeabschnitt, der eine geordnete Reihe von Werten desselben Typs zurückgibt.

  • Ein Iterator kann als Text einer Methode, eines Operators oder eines get-Accessors verwendet werden.

  • Der Iteratorcode verwendet die yield return-Anweisung, um jedes Element der Reihe nach zurückzugeben. yield break beendet die Iteration. Weitere Informationen finden Sie unter yield.

  • Für eine Klasse können mehrere Iteratoren implementiert werden. Wie alle Klassenmember muss jeder Iterator einen eindeutigen Namen besitzen und kann wie folgt mithilfe von Clientcode in einer foreach-Anweisung aufgerufen werden: foreach(int x in SampleClass.Iterator2){}

  • Der Rückgabetyp eines Iterators muss IEnumerable, IEnumerator, IEnumerable<T> oder IEnumerator<T> sein.

Das yield-Schlüsselwort wird zur Angabe des zurückgegebenen Werts (oder der zurückgegebenen Werte) verwendet. Bei Erreichen der yield return-Anweisung wird die aktuelle Position gespeichert. Wenn der Iterator das nächste Mal aufgerufen wird, wird die Ausführung von dieser Position neu gestartet.

Iteratoren sind besonders für Auflistungsklassen nützlich, denn sie bieten eine einfache Möglichkeit, nicht triviale Datenstrukturen, z. B. binäre Strukturen, zu durchlaufen.

Verwandte Abschnitte

Beispiel

In diesem Beispiel ist die Klasse DaysOfTheWeek eine einfache Auflistungsklasse, die die Tage der Woche als Zeichenfolgen speichert. Nach jeder Iteration einer foreach-Schleife wird die nächste Zeichenfolge in der Auflistung zurückgegeben.

public class DaysOfTheWeek : System.Collections.IEnumerable
{
    string[] m_Days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

    public System.Collections.IEnumerator GetEnumerator()
    {
        for (int i = 0; i < m_Days.Length; i++)
        {
            yield return m_Days[i];
        }
    }
}

class TestDaysOfTheWeek
{
    static void Main()
    {
        // Create an instance of the collection class
        DaysOfTheWeek week = new DaysOfTheWeek();

        // Iterate with foreach
        foreach (string day in week)
        {
            System.Console.Write(day + " ");
        }
    }
}

Ausgabe

Sun Mon Tue Wed Thr Fri Sat

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 22 Iteratoren

Siehe auch

Anzeigen:
© 2016 Microsoft