Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > этот странный yield


Автор: jonie 23.12.2007, 21:11
Так во чтоже компилятор (или предкомпилятор?) превращает yield ?
т.е. как происходит сохранение текущего состояния...?
например
Код

        public class myList: IEnumerable
        {
            public IEnumerator GetEnumerator()
            {
                yield return "1st";
                yield return "2th";
                yield return "3th";
            }
        }
где-то же должно сохраняться состояние...?
где про это почитать?

Автор: izekia 23.12.2007, 23:34
какое состояние? 
возврат происходит только после завершения метода

кстати, по теме, если null не стоит возвращать
я об этом в своем блоге писа

Автор: jonie 24.12.2007, 00:07
состояние - например для данного примера - что возвращать на след. итерации...

Автор: izekia 24.12.2007, 00:26
jonie, я не понимаю о чем речь
фактический возврат из метода происходит в момент его завершения, возвращается объект типа IEnumerable
про какое состояние говорим?

Автор: mr.DUDA 25.12.2007, 01:54
Цитата(izekia @  23.12.2007,  23:26 Найти цитируемый пост)
про какое состояние говорим?

Говорим про контекст энумератора  smile
yield return возвращает очередное значение при перечислении, причём после его использования в foreach управление возвращается в ту точку, в которой был yield return, перечисление продолжается. Читайте http://msdn.microsoft.com/msdnmag/issues/06/00/c20/default.aspx?loc=ru.

В контекст входят все локальные переменные и параметры метода. Компилятор автоматически создаёт класс, куда копирует всё перечисленное перед передачей управления в yield return. Если интересно, можно расковырять скомпилированный .exe/.dll рефлектором, на самом деле под "простым yield" кроется много непотребной шелухи.

Автор: jonie 25.12.2007, 01:56
mr.DUDA меня вполне понял. +1
что и хотел подтвердить для себя (смотрел я ессно сборки))
тема закрыта.

Автор: izekia 25.12.2007, 08:59
mr.DUDA, да, точно
проверил на примере
спасибо за ссылку
был неправ

по ссылке правда немного не то)

Автор: mr.DUDA 25.12.2007, 13:40
Цитата(izekia @  25.12.2007,  07:59 Найти цитируемый пост)
по ссылке правда немного не то)

Да нет, именно то smile
Итераторы называется.

Автор: izekia 25.12.2007, 14:03
mr.DUDA, я про то что там в общем обо всем 

Автор: jonie 25.12.2007, 14:09
ну, мужики, извиняйте - в терминологии .net я плаваю) потому и писал в это раздел)

Автор: mr.DUDA 25.12.2007, 14:34
jonie, всё нормально  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)