IEnumerator и IEnumerable — это два интерфейса, предоставляемые в пространстве имен System.Collections.

IEnumerator помогает нам пройтись по коллекции —

Всякий раз, когда вы используете цикл foreach для коллекции, вы внутренне вызываете и используете экземпляр IEnumerator.

Позвольте мне объяснить, как -

Интерфейс IEnumerator имеет два метода — MoveNext() и Reset(). У него также есть свойство Current, которое возвращает элемент в текущей позиции.

Теперь, где вписывается IEnumerable?

Интерфейс IEnumerable имеет один метод GetEnumerator(), который возвращает экземпляр IEnumerator коллекции.

Так, например, приведенный ниже фрагмент кода -

IEnumerable<Book> items = new List<Book>();
foreach (var item in items)
{
  // some code to access item of type Book
}

На самом деле работает, как показано ниже -

IEnumerable<Book> items = new List<Book>();

var itemsEnumerator = items.GetEnumerator();
Book item;

while (itemsEnumerator.MoveNext())
{
  item = (Book)itemsEnumerator.Current;
  // some code to access item of type Book
}

Любая конкретная реализация IEnumerable (List, Dictionary, ArrayList, HashSet и т. д.) также реализует метод IEnumerable.GetEnumerator(), который возвращает реализацию IEnumerator для этого конкретного класса, что помогает нам перебирать его.

#csharpdotnet #csharpdeveloper #programming #collections #dotnet