Интерфейс IEnumerator, реализованный классом, позволяет выполнять его итерацию с использованием встроенного синтаксиса foreach.
В классе, который должен быть повторен для интерфейса IEnumerator, определяется сигнатура метода для функции GetEnumerator, которая управляет циклическим перемещением по объекту.
public IEnumerator<OrderLine> GetEnumerator()
{
for (int i=0;i<maxItems;i++)
{
yield return item[i];
}
}
Как видно из этого примера, оператор yield позволяет вернуть элемент управления вызывающей стороне, не теряя своего места в перечислении. Управление будет возвращено обратно в строку после оператора yield, когда вызывающая сторона достигнет следующего приращения цикла foreach.