Я использовал его иногда, когда первая итерация делает что-то отличное от других.
Например, если вы хотите печатать элементы на консоли и разделять результаты по строкам, вы можете написать.
using (IEnumerator<MyClass> classesEnum = myClasses.GetEnumerator()) {
if (classEnum.MoveNext())
Console.WriteLine(classesEnum.Current);
while (classesEnum.MoveNext()) {
Console.WriteLine("-----------------");
Console.WriteLine(classesEnum.Current);
}
}
Тогда результат
myClass 1
-----------------
myClass 2
-----------------
myClass 3
И еще одна ситуация, когда я перебираю 2 счетчика вместе.
using (IEnumerator<MyClass> classesEnum = myClasses.GetEnumerator()) {
using (IEnumerator<MyClass> classesEnum2 = myClasses2.GetEnumerator()) {
while (classesEnum.MoveNext() && classEnum2.MoveNext())
Console.WriteLine("{0}, {1}", classesEnum.Current, classesEnum2.Current);
}
}
результат
myClass 1, myClass A
myClass 2, myClass B
myClass 3, myClass C
Использование перечислителя позволяет сделать вашу итерацию более гибкой. Но в большинстве случаев вы можете использовать foreach