Нет, любой класс с хорошим поведением, который реализует IEnumerable
, допускает повторные перечисления.
Для перечисления коллекций, которые не повторяются, у вас нет класса, реализующего IEnumerable
. Вместо этого у вас есть метод, который возвращает перечислитель. Таким образом, перечислитель вместо класса содержит коллекцию, поэтому невозможно вызвать GetEnumerator
дважды для одной и той же коллекции. Чтобы повторить перечислитель, вы должны вызвать метод для создания новой коллекции.
Примером этого является Enumerable.Range
метод. Он создает элементы для диапазона на лету, поэтому диапазон не существует как коллекция, что делает его неповторимым. Чтобы снова перечислить тот же диапазон, вы вызываете метод для создания нового диапазона с такими же границами.