Самый простой пример:
IEnumerable<string> GetNames()
{
yield return "Bob";
yield return "Bob's uncle";
yield return "Alice";
yield return "Stacy";
yield return "Stacy's mom";
}
Использование:
foreach (var name in GetNames())
{
Console.WriteLine(name);
}
Чтобы увидеть его в действии, поместите точку останова отладчика на каждую строку в GetNames
метод.
Хороший образец может быть найдено на странице MSDN для IEnumerable .
Еще одна книга, которую я нашел весьма полезной, когда изучал IEnumerable и IEnumerator, - это книга Трольсена Pro C # 2008. В нем объясняется, что содержат интерфейсы и как создавать итераторы с ключевым словом yield.
Надеюсь на эту помощь.
Вот еще несколько ресурсов, которые пригодятся вам после того, как вы освоите основы.
Уэс написал отличную статью о производительности итераторов:
http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx
Если у вас есть вопросы о том, почему существует так много странных ограничений на то, что вы можете делать в блоке итератора, вот моя серия из семи частей о том, чем мотивированы необычные правила:
http://blogs.msdn.com/ericlippert/archive/tags/Iterators/default.aspx
Лучший пример и ссылку, которые я нашел, на самом деле находится в C# in Depth книге всемогущего Джона Скита. Это не слишком дорого, и это того стоит для всего, что вы узнаете о C#.