Suche…


Bemerkungen

Ein Iterator ist eine Methode, ein Abruf-Accessor oder ein Operator, der eine benutzerdefinierte Iteration über ein Array oder eine Auflistungsklasse mit dem Schlüsselwort ertrag durchführt

Einfaches numerisches Iterator-Beispiel

Ein häufiger Anwendungsfall für Iteratoren ist es, einige Operationen mit einer Reihe von Zahlen durchzuführen. Das folgende Beispiel veranschaulicht, wie jedes Element innerhalb eines Zahlenfeldes einzeln auf die Konsole gedruckt werden kann.

Dies ist möglich, weil Arrays die IEnumerable Schnittstelle implementieren, sodass Clients mithilfe der GetEnumerator() Methode einen Iterator für das Array GetEnumerator() . Diese Methode gibt einen Enumerator zurück , der ein schreibgeschützter Vorwärtscursor über jeder Zahl im Array ist.

int[] numbers = { 1, 2, 3, 4, 5 };

IEnumerator iterator = numbers.GetEnumerator();

while (iterator.MoveNext())
{
    Console.WriteLine(iterator.Current);
}

Ausgabe

1
2
3
4
5

Es ist auch möglich, die gleichen Ergebnisse mit einer foreach Anweisung zu erzielen:

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

Erstellen von Iteratoren mithilfe von Ertrag

Iteratoren erzeugen Enumeratoren. In C #, werden durch die Definition Enumeratoren Methoden, Eigenschaften oder Indexer hergestellt , die enthalten yield Aussagen.

Die meisten Methoden geben die Kontrolle über ihre normalen return Anweisungen an ihren Aufrufer return . Im Gegensatz dazu Methoden , die verwendet wird yield Aussagen erlauben sie mehrere Werte an den Aufrufer auf Anfrage zurückzukehren , während lokalen Zustand in-zwischen diesen Werten zu bewahren zurück. Diese zurückgegebenen Werte bilden eine Sequenz. Es gibt zwei Arten von yield , die in Iteratoren verwendet werden:

  • yield return , die die Kontrolle an den Anrufer zurückgibt, aber den Status beibehält. Der Angerufene setzt die Ausführung ab dieser Zeile fort, wenn die Kontrolle wieder an ihn übergeben wird.

  • yield break , die ähnlich wie eine normale return Anweisung funktioniert - dies bedeutet das Ende der Sequenz. Normale return selbst sind innerhalb eines Iteratorblocks unzulässig.

Dieses Beispiel veranschaulicht eine Iterator-Methode, mit der die Fibonacci-Sequenz generiert werden kann :

IEnumerable<int> Fibonacci(int count)
{
    int prev = 1;
    int curr = 1;
    
    for (int i = 0; i < count; i++)
    {
        yield return prev;
        int temp = prev + curr;
        prev = curr;
        curr = temp;
    }
}

Dieser Iterator kann dann verwendet werden, um einen Enumerator der Fibonacci-Sequenz zu erzeugen, der von einer aufrufenden Methode verarbeitet werden kann. Der folgende Code veranschaulicht, wie die ersten zehn Terme in der Fibonacci-Sequenz aufgelistet werden können:

void Main()
{
    foreach (int term in Fibonacci(10))
    {
        Console.WriteLine(term);
    }
}

Ausgabe

1
1
2
3
5
8
13
21
34
55


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow