Оскільки прикладів не наводилось, ось один, який був для мене корисним.
Перечислювач - це об'єкт, який ви отримуєте при виклику .GetEnumerator () класу або типу, що реалізує інтерфейс IEnumerator. Коли цей інтерфейс реалізований, ви створили весь код, необхідний компілятору для використанняforeach
"ітерацію" над вашою колекцією.
Нехай це слово "ітерація" не плутається з ітератором. І перелік, і ітератор дозволяють вам "ітерацію". Перерахування та ітерація - це в основному один і той же процес, але реалізується по-різному. Перерахування означає, що ви застосували інтерфейс IEnumerator Ітерація означає, що ви створили конструкцію ітератора у своєму класі (продемонстровано нижче), і ви телефонуєте foreach
свій клас, тоді компілятор автоматично створює для вас функціональність перечислювача.
Також зауважте, що вам не потрібно робити присідання зі своїм перелічувачем. Ви можете телефонувати MyClass.GetEnumerator()
цілий день і нічого з цим не робити (приклад:
IEnumerator myEnumeratorThatIWillDoNothingWith = MyClass.GetEnumerator()
).
Також зауважте, що ваша конструкція ітератора у вашому класі застосовується лише тоді, коли ви насправді використовуєте її, тобто ви телефонували foreach
до свого класу.
Ось приклад ітератора з msdn :
public class DaysOfTheWeek : System.Collections.IEnumerable
{
string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
public System.Collections.IEnumerator GetEnumerator()
{
for (int i = 0; i < days.Length; i++)
{
yield return days[i];
}
}
}
class TestDaysOfTheWeek
{
static void Main()
{
DaysOfTheWeek week = new DaysOfTheWeek();
foreach (string day in week)
{
System.Console.Write(day + " ");
}
}
}