Итератор
Модификатор yield указывает, что применяется итерационный блок. Итерационные блоки могут применяться только на методах возвращающих коллекцию IEnumerable или IEnumerable <T>.
public IEnumerable DateRange { get { for (DateTime day = StartDate; day <= EndDate; day = day.AddDays(1)) { yield return day; } } }
Где
StartDate, EndDate могут быть свойства текущего класса или класса родителя.
Реализация метода Where() языка LINQ с применением итераторных блоков
public static IEnumerable Where(IEnumerable source, Predicate predicate) { if (source == null || predicate == null) //Энергичная проверка { throw new ArgumentNullException(); } return WhereImpl(source, predicate); //Ленивая обработка данных }
private static IEnumerable WhereImpl(IEnumerable source,Predicate predicate) { foreach (T item in source) { if (predicate(item)) //Проверка текущего элемента на предмет соответствия предикату { yield return item; } } }