Я разработчик VB.Net, новичок в С#. Просматривая документацию по С#, я просматривал итераторы и генераторы, не мог полностью понять их использование, я нашел любого, кто может объяснить (в проницательности vb, если возможно)
Что такое итераторы и генераторы С# и как их использовать
comment
Итераторы чаще всего используются для обхода списков разных типов. Итераторы называются Enumerators в .net. Другой вопрос, касающийся итераторов: stackoverflow. ком/вопросы/1227283/
- person jgauffin   schedule 22.09.2010
comment
Термин «генератор» используется на других языках — см. вопросы/38274727/c-sharp-generator-method
- person Michael Freidgeim   schedule 06.10.2019
Ответы (1)
Итераторы — это простой способ создать последовательность элементов без необходимости самостоятельной реализации IEnumerable<T>
/IEnumerator<T>
. Итератор — это метод, возвращающий IEnumerable<T>
, который можно перечислить в цикле foreach.
Вот простой пример:
public IEnumerable<string> GetNames()
{
yield return "Joe";
yield return "Jack";
yield return "Jane";
}
foreach(string name in GetNames())
{
Console.WriteLine(name);
}
Обратите внимание на операторы yield return
: эти операторы на самом деле не возвращают значение из метода, они просто «выдвигают» следующий элемент тому, кто читает реализацию.
Когда компилятор встречает блок итератора, он фактически перезаписывает его в конечный автомат в классе, который реализует IEnumerable<T>
и IEnumerator<T>
. Каждый оператор yield return
в итераторе соответствует состоянию в этом конечном автомате.
Дополнительные сведения об итераторах см. в этой статье Джона Скита.
person
Thomas Levesque
schedule
22.09.2010
Было бы полезно увидеть пример того, когда вам может понадобиться это сделать. Ваш простой пример здесь можно было бы просто заменить массивом строк, если цель состоит в том, чтобы просто разрешить перечисление Джо, Джека и Джейн?
- person MarkJ; 16.02.2011
Да, этот пример не очень полезен, вместо него вы можете легко использовать массив. Дополнительные полезные примеры см. в серии статей Джона Скита о повторной реализации Linq to Objects а> ;)
- person Thomas Levesque; 16.02.2011
Чтобы сохранить относительный ответ, серия Джона Скита больше не существует по указанному выше URL-адресу. Его можно найти здесь: codeblog.jonskeet.uk/category/edulinq
- person John Kraft; 15.05.2018