Zoeken…


Invoering

IEnumerable is de basisinterface voor alle niet-generieke collecties zoals ArrayList die kunnen worden opgesomd. IEnumerator<T> is de basisinterface voor alle generieke enumerators zoals List <>.

IEnumerable is een interface die de methode GetEnumerator . De methode GetEnumerator retourneert een IEnumerator die opties biedt om de verzameling te doorlopen zoals foreach.

Opmerkingen

IEnumerable is de basisinterface voor alle niet-generieke collecties die kunnen worden opgesomd

IEnumerable

In zijn meest basale vorm vertegenwoordigt een object dat IEnumerable implementeert een reeks objecten. De objecten in kwestie kunnen worden herhaald met behulp van het trefwoord c # foreach .

In het onderstaande voorbeeld implementeert het object sequenceOfNumbers IEnumerable. Het vertegenwoordigt een reeks gehele getallen. De foreach lus doorloopt elke beurt om de beurt.

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

IEantal met aangepaste Enumerator

Door de IEnumerable-interface te implementeren, kunnen klassen op dezelfde manier worden opgesomd als BCL-collecties. Dit vereist het uitbreiden van de Enumerator-klasse die de status van de opsomming volgt.

Naast het herhalen van een standaardcollectie, zijn voorbeelden:

  • Getallenreeksen gebruiken op basis van een functie in plaats van een verzameling objecten
  • Implementeren van verschillende iteratie-algoritmen over collecties, zoals DFS of BFS in een grafiekcollectie
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow