Когда я читаю код, который использует 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 может работать правильно.