Frage

  

Mögliche Duplizieren:
   Kann mir jemand erklären IEnumerable und IEnumerator mir?

Was sind die Unterschiede zwischen IEnumerator und IEnumerable?

War es hilfreich?

Lösung

IEnumerable ist eine Schnittstelle, die eine Methode definiert, GetEnumerator , die ein IEnumerator Schnittstelle, dies wiederum erlaubt Nur-Lese-Zugriff auf eine Sammlung. Eine Kollektion, die IEnumerable implementiert, kann mit einer foreach-Anweisung verwendet werden.

Definition

IEnumerable 

public IEnumerator GetEnumerator();

IEnumerator

public object Current;
public void Reset();
public bool MoveNext();

Beispielcode von codebetter.com

Andere Tipps

Ein IEnumerator ist eine Sache, die aufzählen kann. Es die Current Eigenschaft hat und die MoveNext und Reset Methoden (die in .NET Code, den Sie wahrscheinlich nicht explizit nennen, obwohl Sie könnten)

Ein IEnumerable ist eine Sache, die aufgezählt werden kann ... was einfach bedeutet, dass es eine Methode GetEnumerator hat, die ein IEnumerator zurück.

Welche benutzen Sie? Der einzige Grund, IEnumerator zu verwenden ist, wenn Sie etwas haben, das eine Nicht-Standard-Weise aufzuzählen hat (das heißt, seine verschiedenen Elemente der Rückkehr one-by-one), und Sie müssen festlegen, wie das funktioniert. Sie würden eine neue Klasse Umsetzung IEnumerator erstellen. Aber Sie würden immer noch, dass IEnumerator in einer IEnumerable Klasse zurückgeben müssen.

Für einen Blick auf das, was ein Enumerator (implementierende IEnumerator<T>) aussieht, sehen jede Enumerator<T> Klasse, wie die enthaltenen diejenigen in List<T>, Queue<T>, oder Stack<T>. Für einen Blick auf eine Klasse Implementierung IEnumerable finden alle Standard-Collection-Klasse.

Ein Enumerator zeigt Ihnen die Elemente in einer Liste oder Sammlung. Jede Instanz eines Enumerator ist an einer bestimmten Position (dem ersten Element, das siebte Element, usw.) und können Sie das Element (IEnumerator.Current) geben oder auf die nächste (IEnumerator.MoveNext) bewegen. Wenn Sie eine foreach Schleife in C # zu schreiben, erzeugt der Compiler Code, der eine Enumerator verwendet.

Ein Enumerable ist eine Klasse, die Sie Enumerators geben kann. Es hat eine Methode namens GetEnumerator, die Ihnen eine Enumerator gibt, der an seinem Artikel aussieht. Wenn Sie eine foreach Schleife in C # zu schreiben, der Code, der es Anrufe erzeugt GetEnumerator die Enumerator durch die Schleife verwendet erstellen.

IEnumerable und IEnumerator sind beide Schnittstellen. IEnumerable hat nur eine Methode namens GetEnumerator. Diese Methode Retuns einen anderen Typ (wie alle Methoden etwas einschließlich void zurückgeben), das ist eine Schnittstelle und die Schnittstelle IEnumerator. Wenn Sie Aufzählungslogik in jeder Ihrer Sammlung Klasse implementieren, implementieren Sie IEnumerable (entweder generische oder nicht generisch). IEnumerable hat nur eine Methode, während IEnumerator 2 Methoden zur Verfügung (Movenext und Reset) und eine Eigenschaft Current. Zum leichteren Verständnis betrachten IEnumebale eine Box, die IEnumerator Inneren enthält (wenn auch nicht durch Vererbung oder Eindämmung). Sehen Sie den Code für ein besseres Verständnis:

    class Test : IEnumerable, IEnumerator
    {
         IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }

        public object Current
        {
            get { throw new NotImplementedException(); }
        }

        public bool MoveNext()
        {
            throw new NotImplementedException();
        }
        public void Reset()
        {
            throw new NotImplementedException();
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top