Pull to refresh
8
Karma
0
Rating
Pavel Rytikov @superhomek

Пользователь

Yield: что, где и зачем

Тот же dotPeek. В Assembly Explorer'е, в контектном меню, Decompiled Sources.

Yield: что, где и зачем

Прошу прощения, что ввел в заблуждение. Для того чтобы метод GetOddNumbers соответствовал сгенерированному итератору, у него не должно быть аргументов. Я поправил пример.
Когда у метода аргументы есть, они будут добавлены в поля сгенерированного класса, а присваивание значений будет идти напрямую.


Пример кода
var iterator = new CompilerGeneratedYield(-2);
iterator.startingWith = startingWith;
return iterator;

private sealed class CompilerGeneratedYield // : ...iterfaces
{
    public int startingWith;
    // ...generated code
}

Yield: что, где и зачем

Все правильно, последовательность генерируется по мере запрашивания элементов через MoveNext().

Yield: что, где и зачем

Спасибо за замечание, исправил.
Что касается сути теста, то мне хотелось продемонстрировать паттерн, который я постоянно встречаю в коде: разработчик, получив IEnumerable, тут же вызывает ToList() или ToArray(). И я с вами полностью согласен, если сравнивать «цикл vs. итератор», этот тест некорректен.

Information

Rating
Does not participate
Location
Украина
Registered
Activity