Открыть список
Как стать автором
Обновить

Комментарии 12

Yield хорош для организации конвеера данных. Загрузить с сайта небольшой батч данных в память, отдать через yield, обработать, сохранить, moveNext().
Отличный пример!
Вы правы, но в принципе в статье я не говорю о том, что с Reset что-то не так :) Просто обращаю на этот момент внимание.
Реализует IDisposable по той же причиние, почему и типизированный IEnumerator<T> наследует IDisposable. В том числе foreach пытается кастовать нетипизированный IEnumerable в IDisposable и гарантирует вызов Dispose() если удается скастовать.
Действительно, вы правы. Хотя мне всё-таки не совсем понятно, зачем же тогда в объявлении генератора записан IDisposable
Хотя возможно, что здесь дело в особенностях работы декомпилятора.
Поправил этот момент, большое спасибо!
То, что нетипизированный IEnumerator не наследует IDisposable, это похоже на легаси первой версии c# и оставлено для обратной совместимости. Это исправлено в типизированном IEnumerator<T>. Мнение Джона Скита: stackoverflow.com/questions/232558/why-does-ienumeratort-inherit-from-idisposable-while-the-non-generic-ienumerat

Спасибо за статью. В какой-то степени магия свелась к физике:) Лично мне было очень интересно почитать.

Начиная с C# 8, метод с yield может возвращать ещё и System.Collections.Generic.IAsyncEnumerable<T>, что позволит ему быть асинхронным. Разумеется, внутренняя реализация будет отличаться, но общие принципы те же — сгенерированный класс с полями для параметров метода и локальных переменных, и switch по полю state в методе MoveNext.

Очень ценное замечание, спасибо!
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.