All infos - Итератор
18
авг

Итератор

Модификатор 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; } } }

Share this post