leone Ответов: 1

Очень простой вопрос о методе выбора linq


Привет,
Это объявление выберите способ:
Выберите&ЛТ;метод становится TResult&ГТ;(интерфейс IEnumerable&ЛТ;метод&ГТ;, функция&ЛТ;метод int32 значение,становится TResult&ГТ;)

Так почему же мы используем его именно так:
список.Выберите(s=>s.Name)

s=>s.Name-это анонимный метод, поэтому он является делегатом Func, тогда где находится первый параметр, который является IEnumerable<tsource>

Я бы этого ожидал
список.Выберите(список,с=&ГТ;с. Название)

Что я уже пробовал:

Я искал материалы linq и искал в google.

1 Ответов

Рейтинг:
9

F-ES Sitecore

Select-это метод расширения с первым параметром (IEnumerable<tsource> source), помеченным как "this";

IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)


То, как методы расширения word-это объект, на котором вы их вводите, передается в параметр "this", так что вы правы в том, что метод действительно вызывается;

list.Select(list,s=>s.Name)



однако .net передает объект "list" в качестве первого параметра, поскольку этот параметр помечен как "this"

Итак этот код здесь;

list.Select(s=>s.Name)


компилируется как

list.Select(list,s=>s.Name)


с компилятором, передающим первый параметр для вас.


OriginalGriff

:большой палец вверх:
Пятно на - +5!

Richard Deeming

Nit-picking: он скомпилирован как Enumerable.Select(list, ..., нет list.Select(list, ... :)

BillWoodruff

+5