Это не самая лучшая вещь, так что, надеюсь, вы сможете найти лучший способ, но вы всегда можете отказаться от сгенерированного компилятором кода и создать свой собственный класс, который реализует IEnumerator<MyItem>
(и, возможно, ваш собственный класс, реализующий IEnumerable<MyItem>
- в зависимости от сложности, это может сделать вещи проще или сложнее), а затем построить счетчик более или менее, как это было бы в дни до .NET2.0.
Если логика вашего реальногоБлок итератора очень сложен, вы можете найти, что представление класса, созданного компилятором для вас, является хорошей отправной точкой в этом, хотя иногда сгенерированный код является более сложным (или, по крайней мере, менее читабельным), чем подходкаждый взял бы себя.
Всегда немного разочаровывает необходимость создавать класс IEnumerator
, когда yield
делает его таким приятным для нас в 99% случаев, но бывают моменты, когда это необходимои это может решить вашу проблему здесь.