IEnumerator и IEnumerable в C# отличаются по назначению и функциональности. 1
IEnumerator — интерфейс, который определяет базовый низкоуровневый протокол для прохода по элементам (перечисления) последовательности в однонаправленной манере. 2 Он поддерживает простую итерацию по необобщённой коллекции. 3 У IEnumerator есть методы MoveNext и Reset, а также свойство Current, которое указывает на текущий элемент, затрагиваемый во время итерации. 3
IEnumerable — интерфейс, который представляет коллекцию элементов, по которым можно выполнять итерацию. 3 Он не содержит других методов или свойств, кроме одного метода GetEnumerator, который возвращает объект IEnumerator. 3 С помощью IEnumerable можно работать только с коллекцией объектов, хранящихся в памяти. 3
Таким образом, IEnumerator отвечает на вопрос, как перечислять элементы, а IEnumerable — на вопрос, можно ли перечислять элементы. 1