Методы LINQ являются методами расширения? - PullRequest
7 голосов
/ 21 августа 2011

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

Методы расширения методов LINQ, которые вставляются в типы IEnumerable/IQueryable во время выполнения, и если да, то почему?

1 Ответ

15 голосов
/ 21 августа 2011

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

Другим побочным эффектом будет то, что код, написанный на .NET 2.0, все еще будет компилироваться с 3.0, когда был представлен Linq.В противном случае, если бы вы реализовали IEnumerable где-то в своем проекте, вам теперь пришлось бы реализовать и все новые методы в интерфейсе.

Методы LINQ для объектов Linq To определены в Enumerable class.

Более того, LINQ ищет методы, которые объявлены с использованием определенного синтаксиса и не основаны на интерфейсе или классе.Вам может показаться интересной серия Edulinq Джона Скита.

MSDN о методах расширения.

...