Почему метод LINQ "apply-to-all" называется Select?

Когда я читаю код, который использует Select, я думаю, что "select-all-where". Когда я читаю код, который использует Map, я думаю, что "это-к-тому" или "применимо ко всем". Я не могу быть единственным человеком, который считает, что имя Select запутывает.

Map

Ответ 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 может работать правильно.