Linq: Каково различие между Выбором и Где

Так как Firebug не работает над Вашим сервером, но берет CSS от сайта и хранит его локально и показывает Вам сайт с теми локальными изменениями.

113
задан 3 revs, 3 users 67% 26 February 2017 в 18:52
поделиться

4 ответа

Они разные:

Select - это преобразование .

Где - это фильтрация .

43
ответ дан 24 November 2019 в 02:41
поделиться

Select отображает перечислимый объект в новую структуру. Если вы выполните выбор в IEnumerable, вы получите массив с тем же количеством элементов, но другого типа в зависимости от указанного вами сопоставления. Где фильтрует IEnumerable, чтобы получить подмножество исходного IEnumerable.

18
ответ дан 24 November 2019 в 02:41
поделиться

Выберите и Где - два совершенно разных оператора, действующих на IEnumerable s.

Первый - это то, что мы называем Оператор проекции , а последний - это Оператор ограничения .

Один интересный способ узнать о поведении таких операторов - это взглянуть на их «функциональный тип».

  • Выберите: (IEnumerable , Func ) → IEnumerable ; на вход он принимает как IEnumerable, содержащий элементы типа T1, так и функцию, преобразующую элементы типа T1 в элементы типа T2. На выходе получается IEnumerable, содержащий элементы типа T2.

    Отсюда легко догадаться, что этот оператор будет производить свой вывод, применяя функцию ввода к каждому элементу входного IEnumerable и помещая результаты в новый IEnumerable.

    Используя некоторые математические обозначения, он принимает в качестве входных данных (a, b, c, ...): IEnumerable и f: T1 → T2 и производит (f (a), f (b), f (c ), ...): IEnumerable

  • Где: (IEnumerable , Func ) → IEnumerable ; для этого требуется IEnumerable, содержащий элементы типа T1 и предикат для T1 (то есть функция, которая производит логический результат для ввода типа T1). Вы видите, что вывод также является IEnumerable, содержащим элементы типа T1.

    На этот раз можно предположить, что элемент входного IEnumerable будет присутствовать в выходном IEnumerable в зависимости от результата применения предиката к элементу. Добавляя к этому семантику имени оператора, вы можете быть уверены, что он создаст выходной IEnumerable, взяв из входа только те элементы, которые оцениваются как истинные при применении предиката.

Люди с функциональным программирование фон обычно думает так. Он позволяет вам вывести (или хотя бы догадаться ...), что делает оператор, только глядя на его тип!

В качестве упражнения попробуйте взглянуть на другие операторы, представленные LINQ в IEnumerables, и вывести их поведение, прежде чем искать в документации!

Добавляя к этому семантику имени оператора, вы можете быть уверены, что он создаст выходной IEnumerable, взяв из входа только те элементы, которые оцениваются как истинные при применении предиката.

Люди с функциональным программирование фон обычно думает так. Он позволяет вам вывести (или хотя бы догадаться ...), что делает оператор, только глядя на его тип!

В качестве упражнения попробуйте взглянуть на другие операторы, представленные LINQ в IEnumerables, и вывести их поведение, прежде чем искать в документации!

Добавив к этому семантику имени оператора, вы можете быть уверены, что он создаст выходной IEnumerable, взяв из входа только те элементы, которые оцениваются как истинные при применении предиката.

Люди с функциональным программирование фон обычно думает так. Он позволяет вам вывести (или хотя бы догадаться ...), что делает оператор, только глядя на его тип!

В качестве упражнения попробуйте взглянуть на другие операторы, представленные LINQ в IEnumerables, и вывести их поведение, прежде чем искать в документации!

Люди с опытом функционального программирования обычно думают так. Он позволяет вам вывести (или хотя бы догадаться ...), что делает оператор, только глядя на его тип!

В качестве упражнения попробуйте взглянуть на другие операторы, представленные LINQ в IEnumerables, и вывести их поведение, прежде чем искать в документации!

Люди с опытом функционального программирования обычно думают так. Он позволяет вам вывести (или хотя бы догадаться ...), что делает оператор, только глядя на его тип!

В качестве упражнения попробуйте взглянуть на другие операторы, представленные LINQ в IEnumerables, и вывести их поведение, прежде чем искать в документации!

46
ответ дан 24 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: