Почему этот код объявляет локальную функцию только для ее немедленного вызова? - PullRequest
0 голосов
/ 27 января 2020

Дополнительный вопрос, основанный на Как называется здесь: return _ () .

Какой смысл декларировать локальную функцию ниже?

return _(); IEnumerable<TResult> _()
{
    var bucket = new TSource[collection.Count];
    collection.CopyTo(bucket, 0);
    yield return resultSelector(bucket);
}

Почему бы просто не заменить вызов телом функции?

var bucket = new TSource[collection.Count];
collection.CopyTo(bucket, 0);
yield return resultSelector(bucket);

1 Ответ

0 голосов
/ 27 января 2020

Причина объявления локальной функции сначала не очевидна. Если посмотреть дальше, охватывающий метод возвращает IEnumerable<TResult>. Есть два способа вернуть IEnumerable из метода.

  1. Использование оператора yield return с объектами типа TResult
  2. Использование оператора return с объектом типа IEnumerable<TResult>

Но эти два оператора не могут быть смешаны в одном методе, вам всегда придется использовать один или другой на всех путях выполнения метода.

Используя оператор return ранее в методе, одно и то же утверждение нужно было использовать во всем методе.

...