Szukaj…


Wprowadzenie

IEnumerable to interfejs podstawowy dla wszystkich nietypowych kolekcji, takich jak ArrayList, które można wyliczyć. IEnumerator<T> to podstawowy interfejs wszystkich ogólnych enumeratorów, takich jak List <>.

IEnumerable to interfejs, który implementuje metodę GetEnumerator . GetEnumerator zwraca IEnumerator który zapewnia opcje iteracji w kolekcji, np. Foreach.

Uwagi

IEnumerable to interfejs podstawowy dla wszystkich nietypowych kolekcji, które można wyliczyć

IEnumerable

W swojej najbardziej podstawowej formie obiekt implementujący IEnumerable reprezentuje szereg obiektów. Przedmiotowe obiekty można iterować za pomocą słowa kluczowego foreach c #.

W poniższym przykładzie obiekt sequenceOfNumbers implementuje IEnumerable. Reprezentuje szereg liczb całkowitych. Pętla foreach przechodzi kolejno przez każdą z nich.

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

IEnumerable z niestandardowym modułem wyliczającym

Implementacja interfejsu IEnumerable umożliwia wyliczanie klas w taki sam sposób, jak w kolekcjach BCL. Wymaga to rozszerzenia klasy Enumerator, która śledzi stan wyliczenia.

Poza iteracją standardowej kolekcji, przykłady obejmują:

  • Używanie zakresów liczb opartych na funkcji, a nie na kolekcji obiektów
  • Implementowanie różnych algorytmów iteracji dla kolekcji, takich jak DFS lub BFS w kolekcji wykresów
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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow