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