Когда я читаю код, который использует Select
, я думаю, что "select-all-where".
Когда я читаю код, который использует Map
, я думаю, что "это-к-тому" или "применимо ко всем".
Я не могу быть единственным человеком, который считает, что имя Select
запутывает.
Почему метод LINQ "apply-to-all" называется Select?
Ответ 1
Он действительно идентичен карте с функциональных языков. Причина, по которой он назван Select
, заключается в том, что он предназначен для использования в составе LINQ, который использует SQL-подобные ключевые слова.
from item in collection
where item.Value == someValue
select item.Name
переводится на:
collection.Where(item => item.Value == someValue)
.Select(item => item.Name)
было бы немного непоследовательно, если Select
был назван Map
; что-то вроде:
collection.Filter(item => item.Value == someValue)
.Map(item => item.Name)
Фактически, многие люди используют LINQ, даже не слыша о функциональном программировании. Для них LINQ - это метод для извлечения объектов данных и запроса их легко (например, SQL-запросы). Для них Select
и Where
имеют смысл. Гораздо больше, чем Map
и Filter
.
Ответ 2
Сначала Select
показался мне немного запутанным, но это был только вопрос времени. Мехрдад говорит вам повод для Select
. Кроме того, я чувствую, что Select
гораздо лучше передает аспект нерезкости Linq
. Не то, чтобы Map
означало, что он мутировал исходную структуру, но Select
указывает на это гораздо яснее. В нем говорится, что вы не трогаете исходный список, а просто выбираете его для создания другого списка.
Это относится к другому наименованию, а также к Where
. Когда вы вызываете collection.Filter
, вы получаете представление о том, что вы фильтруете эту конкретную коллекцию или, по крайней мере, в первый раз. В конце концов, все это вопрос ознакомления. Хотя в начале меня так раздражало подражание Linq
, теперь я чувствую, что команда MS получила это самое правильное.
Ответ 3
Одна из основных причин выбора - последний, чтобы сделать работу Intellisense. Помещая сначала источник последовательности (из инструкции), Intellisense может работать правильно.