Прошу прощения, что ввел в заблуждение. Для того чтобы метод GetOddNumbers соответствовал сгенерированному итератору, у него не должно быть аргументов. Я поправил пример.
Когда у метода аргументы есть, они будут добавлены в поля сгенерированного класса, а присваивание значений будет идти напрямую.
Пример кода
var iterator = new CompilerGeneratedYield(-2);
iterator.startingWith = startingWith;
return iterator;
private sealed class CompilerGeneratedYield // : ...iterfaces
{
public int startingWith;
// ...generated code
}
Спасибо за замечание, исправил.
Что касается сути теста, то мне хотелось продемонстрировать паттерн, который я постоянно встречаю в коде: разработчик, получив IEnumerable, тут же вызывает ToList() или ToArray(). И я с вами полностью согласен, если сравнивать «цикл vs. итератор», этот тест некорректен.
Тот же dotPeek. В Assembly Explorer'е, в контектном меню, Decompiled Sources.
Прошу прощения, что ввел в заблуждение. Для того чтобы метод GetOddNumbers соответствовал сгенерированному итератору, у него не должно быть аргументов. Я поправил пример.
Когда у метода аргументы есть, они будут добавлены в поля сгенерированного класса, а присваивание значений будет идти напрямую.
Что касается сути теста, то мне хотелось продемонстрировать паттерн, который я постоянно встречаю в коде: разработчик, получив IEnumerable, тут же вызывает ToList() или ToArray(). И я с вами полностью согласен, если сравнивать «цикл vs. итератор», этот тест некорректен.