приносить доход IEnumerator или IEnumerable - PullRequest
0 голосов
/ 27 мая 2019

Я новичок в C #, просто вопрос по ключевому слову yield, который меня сильно смущает.Кажется, что yield может вернуть IEnumerator и IEnumerable

//case 1
static IEnumerator YieldReturn()
{
   yield return 1;
   yield return 2;
   yield return 3;
}

и

//case 2
static IEnumerable YieldReturn()
{
   yield return 1;
   yield return 2;
   yield return 3;
}

. Почему одна вещь может возвращать два разных типа возврата?

1 Ответ

0 голосов
/ 27 мая 2019

Метод, использующий yield, перестраивается компилятором. Он создает конечный автомат с совершенно новым классом, сгенерированным компилятором.

Этот класс конечного автомата является IEnumerator, а также IEnumerable, чей метод GetEnumerator возвращает сам себя.

Таким образом, в зависимости от того, как вы объявляете свой метод, компилятор генерирует код, который либо возвращает IEnumerable, либо уже инициализированный IEnumerator.

Как всегда, Джон Скит имеет хорошую статью о том, что происходит под капотом с ключевым словом yield.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...