Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public IEnumerable CountFrom(int start, int limit)
{
for (int i = start; i <= limit; i++)
yield return i;
}
Недавно задумался, не лучше ли будет написать:
public IEnumerable CountFrom(int start, int limit)
{
List res = new List();
for (int i = start; i <= limit; i++)
res.Add( i );
return res;
}
Из плюсов второго подхода мне видится более понятный синтаксис - ясно, во что это превратится после компиляции. Из минусов - полный просчет коллекции может и не понадобится в будущем, с итератором (первый вариант) получается отложенная инициализация. Неясен правда вопрос производительности.
А какие есть еще отличия по использованию этих двух кусков кода?
// вызываем метод с yield return
var list = GetValueListEnumerator();
foreach (var value in list)
{
// что-то делаем
}
// не тут-то было, енумератор закончился!
foreach (var value in list)
{
// еще что-то делаем
}
Реализация итераторов в C# (часть 1)