Почему метод LINQ "apply-to-all" называется Select? - PullRequest
27 голосов
/ 22 января 2010

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

Карта

Ответы [ 3 ]

36 голосов
/ 22 января 2010

Это действительно идентично карте из функциональных языков. Причина, по которой он называется 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.

3 голосов
/ 30 марта 2013

Сначала Select тоже казался мне немного смущающим, но это был только вопрос времени. Mehrdad говорит вам веские причины для Select. Кроме этого, я чувствую, что Select гораздо лучше передает аспект неизменности Linq. Не то, чтобы Map означало бы, что оно изменяет первоначальную структуру, но Select утверждает, что это намного яснее. Он говорит, что вы не касаетесь исходного списка, а просто выбираете его, чтобы сформировать другой список.

Это относится и к другим именам, таким как Where. Когда вы звоните collection.Filter, это дает вам представление о том, что вы фильтруете эту конкретную коллекцию или, по крайней мере, в первый раз. В конце концов, все зависит от знакомства. Хотя вначале я был так раздражен именами Linq, теперь я чувствую, что команда MS поняла это наиболее правильно.

0 голосов
/ 22 января 2010

Одна из главных причин, по которой Select идет последним, заключается в том, чтобы заставить Intellisense работать. Если сначала указать источник последовательности (из оператора), Intellisense может работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...