В чем точная разница между возвратом экземпляра IEnumerable и оператором yield return в C #

В настоящее время я работаю с некоторыми библиотеками, применяя отложенное выполнение через итераторы. В некоторых ситуациях возникает необходимость «вперед» полученный итератор просто. Т.е. мне нужно получить экземпляр IEnumerable из вызываемого метода и немедленно вернуть его.

Теперь мой вопрос: есть ли существенная разница между простым возвратом полученного IEnumerable или повторное получение с помощью цикла?

IEnumerable<int> GetByReturn()
{
    return GetIterator(); // GetIterator() returns IEnumerable<int>
}
// or:
IEnumerable<int> GetByReYielding()
{
    for(var item in GetIterator()) // GetIterator() returns IEnumerable<int>
    {
        yield return item;
    }
}
9
задан Oliver 17 September 2010 в 07:28
поделиться