Suche…


Einführung

IEnumerable ist die Basisschnittstelle für alle nicht generischen Sammlungen wie ArrayList, die aufgezählt werden können. IEnumerator<T> ist die Basisschnittstelle für alle generischen Enumeratoren wie List <>.

IEnumerable ist eine Schnittstelle, die die Methode GetEnumerator . Die GetEnumerator Methode gibt einen IEnumerator der Optionen zum Durchlaufen der Auflistung wie foreach enthält.

Bemerkungen

IEnumerable ist die Basisschnittstelle für alle nicht generischen Sammlungen, die aufgelistet werden können

IEnumerable

In seiner einfachsten Form repräsentiert ein Objekt, das IEnumerable implementiert, eine Reihe von Objekten. Die fraglichen Objekte können mit dem Schlüsselwort c # foreach wiederholt werden.

Im folgenden Beispiel implementiert das Objekt sequenceOfNumbers IEnumerable. Es repräsentiert eine Reihe von ganzen Zahlen. Die foreach Schleife durchläuft nacheinander jede.

int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
    int returnValue = 0;
    foreach(int i in sequenceOfNumbers) {
        returnValue += i;
    }
    return returnValue;
}

IEnumerable mit benutzerdefiniertem Enumerator

Durch die Implementierung der IEnumerable-Schnittstelle können Klassen auf dieselbe Weise wie BCL-Sammlungen aufgelistet werden. Dies erfordert die Erweiterung der Enumerator-Klasse, die den Status der Aufzählung verfolgt.

Neben dem Durchlaufen einer Standardsammlung sind folgende Beispiele zu nennen:

  • Verwenden von Zahlenbereichen basierend auf einer Funktion anstelle einer Sammlung von Objekten
  • Implementierung verschiedener Iterationsalgorithmen über Sammlungen, wie DFS oder BFS in einer Diagrammsammlung
public static void Main(string[] args) {

    foreach (var coffee in new CoffeeCollection()) {
        Console.WriteLine(coffee);
    }
}

public class CoffeeCollection : IEnumerable {
    private CoffeeEnumerator enumerator;

    public CoffeeCollection() {
        enumerator = new CoffeeEnumerator();
    }

    public IEnumerator GetEnumerator() {
        return enumerator;
    }

    public class CoffeeEnumerator : IEnumerator {
        string[] beverages = new string[3] { "espresso", "macchiato", "latte" };
        int currentIndex = -1;

        public object Current {
            get {
                return beverages[currentIndex];
            }
        }

        public bool MoveNext() {
            currentIndex++;

            if (currentIndex < beverages.Length) {
                return true;
            }

            return false;
        }

        public void Reset() {
            currentIndex = 0;
        }
    }
}


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