C# Ръководство, Итератори

Внедряването на интерфейсите IEnumerator и IEnumerable е лесно. Но още по-лесно е да използватеiterator, който е метод, оператор или инструмент за достъп, който връща членовете на колекция от обекти на свой ред от началото до края. Така че, ако някакъв масив се състои от пет елемента, тогава итераторът на този масив ще върне всички тези елементи на свой ред. Чрез внедряване на итератор можете да получите достъп до обекти от дефиниран от потребителя клас в foreach цикъл.

Нотациятаyield служи като контекстна ключова дума в C#. Това означава, че има специална цел само в итераторен блок. И извън този блок той може да се използва като всеки друг идентификатор. Трябва да се подчертае, че итераторът не трябва да разчита на масив или колекция от друг тип. Трябва просто да върне следващия елемент от колекцията от елементи. Това означава, че елементите могат да се изграждат динамично с помощта на подходящ алгоритъм.

За да прекъснете итератор, използвайте следната форма на изявлението за доходност:

Когато този оператор се изпълни, итераторът уведомява, че е достигнат краят на колекцията. И това по същество спира самия итератор. Един итератор може да има множество отчети за доходност. Но всеки такъв оператор трябва да върне следващия елемент в колекцията.

е метод, чиято обща форма е дадена по-долу:

където iterator_name обозначава конкретно име на метод; parameter_list - от нула до няколко параметъра, предавани на метода на итератора; obj е следващият обект, върнат от итератора. След като бъде създаден наименуван итератор, той може да се използва навсякъде, където е необходимо, като например за управление на цикъл foreach.

На имеитераторите са много полезни в някои ситуации, защото ви позволяват да предавате аргументи на итератор, който контролира процеса на получаване на специфични елементи от колекция. Например, можете да предадете на итератор началните и крайните граници на колекцията от елементи, върната от колекцията от итератора. Тази форма на итератор може да бъде претоварена, за да се разшири неговата функционалност.

Нека да разгледаме пример за използване на итератори: