interface IEnumerable : IEnumerable
{
IEnumerator GetEnumerator();
}
public interface IEnumerator{
T Current { get; }
bool MoveNext(); // false, когда дальше ехать некуда
void Reset();
}
Объект, возвращаемый методом GetEnumerator(), называется итератор. Итератор реализует интерфейс IEnumerator Замечание. Интерфейс IEnumerator




![Итераторы и LINQ. Выражения запросов using System;using System.Linq;using System.Collections.Generic;class Program { static void Main() Выражения запросов using System;using System.Linq;using System.Collections.Generic;class Program { static void Main() { string[] names](/img/tmb/2/162203/dea879e703e4b0af6c3777c485fb1a9f-800x.jpg)


![Итераторы и LINQ. Запрос SelectMany() string[] input = { Запрос SelectMany() string[] input = {](/img/tmb/2/162203/77e34d8af1c79791ae09db4ec3d7cc5a-800x.jpg)
![Итераторы и LINQ. Упорядочение – OrderBy(), ThenBy() string[] input = { Упорядочение – OrderBy(), ThenBy() string[] input = {](/img/tmb/2/162203/fe18e6dbfe2bdcf9e697f2b3e6f3a13b-800x.jpg)

![Итераторы и LINQ. Групповое соединение - GroupJoinПару составляют элемент первой последовательности и все соответствующие Групповое соединение - GroupJoinПару составляют элемент первой последовательности и все соответствующие ему элементы второй последовательности.string[] boys =](/img/tmb/2/162203/2236f16217f8559795f893d98724a29b-800x.jpg)

![Итераторы и LINQ. Разбиение: Take, Skip, TakeWhile, SkipWhileint[] m = { 3, 1, 8, Разбиение: Take, Skip, TakeWhile, SkipWhileint[] m = { 3, 1, 8, 11, 9 };var result = m.Take(2);](/img/tmb/2/162203/49c594aaf90fe9e63615abbb7e891636-800x.jpg)




![Итераторы и LINQ. Преобразования элементов: OfType, Cast static void Main() { Book[] books = Преобразования элементов: OfType, Cast static void Main() { Book[] books = { new](/img/tmb/2/162203/8106e6bff01b37363b7212c1a0e99991-800x.jpg)