Heim >Backend-Entwicklung >C++ >IEnumerable und IEnumerator in C#: Wie aktivieren sie foreach-Schleifen und benutzerdefinierte Iteratoren?

IEnumerable und IEnumerator in C#: Wie aktivieren sie foreach-Schleifen und benutzerdefinierte Iteratoren?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-09 12:51:41666Durchsuche

IEnumerable and IEnumerator in C#: How Do They Enable foreach Loops and Custom Iterators?

Umfassendes Verständnis von IEnumerable und IEnumerator: dem Kernmechanismus von .NET-Iteratoren

Bei der .NET-Programmierung ist die Implementierung der IEnumerable-Schnittstelle der Schlüssel zum Aktivieren von foreach-Schleifen. Obwohl die foreach-Syntax prägnant und einfach zu verwenden ist, besteht ihre zugrunde liegende Abhängigkeit von den Schnittstellen IEnumerable und IEnumerator.

Anwendungsszenarien von IEnumerable und IEnumerator

IEnumerable wird nicht verwendet, um foreach zu „ersetzen“, im Gegenteil, die Implementierung von IEnumerable ist eine Voraussetzung für die Verwendung von foreach. Wenn Sie eine foreach-Schleife schreiben, wandelt der Compiler sie tatsächlich in eine Reihe von Aufrufen der MoveNext- und Current-Methoden des IEnumerators um.

Der Unterschied zwischen IEnumerable und IEnumerator

  • IEnumerable: definiert eine Schnittstelle mit der GetEnumerator-Methode, die einen IEnumerator zurückgibt.
  • IEnumerator: definiert die Schnittstelle der Methoden MoveNext und Current. MoveNext verschiebt den Iterator zum nächsten Element in der Sequenz, während Current das aktuelle Element zurückgibt.

Warum brauchen wir IEnumerable und IEnumerator?

  • Benutzerdefinierter Iterator: Durch die Implementierung von IEnumerable in Ihren benutzerdefinierten Klassen können Sie eine foreach-Schleife verwenden, um über diese Klassen zu iterieren.
  • Den Iteratormechanismus verstehen: IEnumerator bietet einen Low-Level-Mechanismus zum Durchlaufen einer Sammlung, mit dem Sie den Durchlaufprozess steuern können.
  • Generische Sammlungen: Der C#-Compiler verwendet IEnumerable und IEnumerator, um generische Sammlungsklassen wie List und Dictionary zu erstellen.
  • Asynchrone Programmierung: IEnumerator kann in Verbindung mit dem asynchronen Programmiermodell verwendet werden, um asynchrone Sequenzen zu durchlaufen.

implementiert IEnumerable

Um eine Klasse iterierbar zu machen, müssen Sie die IEnumerable-Schnittstelle implementieren, was die Implementierung der GetEnumerator-Methode erfordert, die einen IEnumerator zurückgibt.

Beispiel

Betrachten Sie die folgende benutzerdefinierte Objektklasse, die die IEnumerable-Schnittstelle implementiert:

<code class="language-csharp">public class CustomCollection : IEnumerable<int>
{
    private int[] data;

    public IEnumerator<int> GetEnumerator()
    {
        return new CustomEnumerator(data);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    private class CustomEnumerator : IEnumerator<int>
    {
        // MoveNext 和 Current 方法用于遍历 data
    }
}</code>

Durch die Implementierung von IEnumerable und die Bereitstellung eines benutzerdefinierten Enumerators können Sie jetzt eine foreach-Schleife verwenden, um Instanzen einer CustomCollection zu durchlaufen.

Das obige ist der detaillierte Inhalt vonIEnumerable und IEnumerator in C#: Wie aktivieren sie foreach-Schleifen und benutzerdefinierte Iteratoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn