Поиск…


Вступление

IEnumerable - это базовый интерфейс для всех не общих коллекций, таких как ArrayList, которые могут быть перечислены. IEnumerator<T> - это базовый интерфейс для всех общих счетчиков, таких как List <>.

IEnumerable - это интерфейс, реализующий метод GetEnumerator . Метод GetEnumerator возвращает IEnumerator который предоставляет опции для итерации через коллекцию, например foreach.

замечания

IEnumerable - это базовый интерфейс для всех не общих коллекций, которые могут быть перечислены

IEnumerable

В своей основной форме объект, реализующий IEnumerable, представляет собой серию объектов. Объекты, о которых идет речь, могут быть повторены с использованием ключевого слова c # foreach .

В приведенном ниже примере sequenceOfNumbers объектовOfNumbers реализует IEnumerable. Он представляет собой серию целых чисел. Цикл foreach выполняет итерацию по очереди.

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

IEnumerable с пользовательским Enumerator

Реализация интерфейса IEnumerable позволяет перечислять классы так же, как коллекции BCL. Это требует расширения класса Enumerator, который отслеживает состояние перечисления.

Примеры, кроме повторения стандартной коллекции, включают:

  • Использование диапазонов чисел на основе функции, а не набора объектов
  • Реализация различных алгоритмов итераций по коллекциям, например DFS или BFS, в коллекции графов
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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow