Подтвердить что ты не робот

Возврат доходности против возврата

Каковы преимущества/недостатки обоих подходов?

return items.Select(item => DoSomething(item));

против

foreach(var item in items)
{
    yield return DoSomething(item);
}

EDIT Как они MSIL примерно эквивалентны, какой из них вы считаете более читаемым?

4b9b3361

Ответ 1

Метод yield return заставляет компилятор С# генерировать класс перечислителя "за кулисами", а вызов Select использует стандартный класс перечисления, параметризованный делегатом. На практике для делегата не должно быть большой разницы между ними, кроме, возможно, дополнительного кадра вызова в случае Select.

Для того, что стоит, обернуть лямбда вокруг DoSomething тоже бесполезно; просто передайте ему делегат.

Ответ 2

В медленном корпоративном мире, где я в настоящее время трачу больше времени, чем хотелось бы, доходность доходности имеет огромное преимущество, что ему не нужна эта новая платформа .NET 3.5, которая не будет установлена, по крайней мере, еще 2 года.

Ответ 3

Выбрать только позволяет возвращать один объект для каждого элемента в вашей коллекции "предметы". Использование дополнительного .Where(x => DoIReallyWantThis(x)) позволяет отсеять нежелательные элементы, но при этом позволяет вам возвращать только один объект на элемент. Если вы хотите потенциально более одного объекта на элемент, вы можете использовать .SelectMany, но легко завершить с помощью одной длинной строки, которая будет менее легкой для чтения.

"return return" имеет возможность сделать ваш код более удобочитаемым, если вы просматриваете сложную структуру данных и выделяете биты информации здесь и там. Лучший пример этого, который я видел, был там, где было около дюжины отдельных условий, которые привели бы к возвращенному объекту, и в каждом случае возвращаемый объект был построен по-разному.