Выбрать только позволяет возвращать один объект для каждого элемента в вашей коллекции «предметы». Использование дополнительного .Where(x => DoIReallyWantThis(x))
позволяет вам отсеять нежелательные элементы, но при этом позволяет вам возвращать только один объект за элемент. Если вы хотите потенциально более одного объекта на один элемент, вы можете использовать .SelectMany
, но легко завершить его с помощью одной длинной строки, которая будет менее легкой для чтения.
«yield return» имеет возможность сделать ваш код более удобочитаемым, если вы просматриваете сложную структуру данных и выбирая биты информации здесь и там. Лучший пример этого, который я видел, был там, где было около дюжины отдельных условий, которые привели бы к возвращенному объекту, и в каждом случае возвращаемый объект был построен по-разному.
Ваш второй фрагмент кода - это * реализация * для выбора. (Предполагая, что это LINQ to Objects.) Вот и все. Select делает - он запускает цикл foreach, запускает делегат для каждого элемента и дает результаты. –
yep. Но при наборе первого и второго различий все еще есть различия. 1-я разница: количество LOC, вторая разница: читаемость, 3-я разница: когда доходность возврата присутствует в методе, применяются некоторые ограничения (т. Е. Вы не можете поставить выбор возврата после возврата доходности тем же методом). –