2011-08-21 43 views
7

私はLINQを理解したいと思って、この問題についていくつかの研究を行い、IEnumerableIQueryableにLINQメソッドがあることを発見しました。しかし、私がこれらのタイプのドキュメントを見ると、私はLINQメソッドを見ません。LINQメソッドは拡張メソッドですか?

ランタイム時にIEnumerable/IQueryable型に挿入されるLINQメソッドの拡張メソッドがありますかもしそうならば?

+0

これは疑問に思われる回答を得るための質問のようです。私はあなたが炎戦を始めようとしていると思います。 – jonathanpeppers

+0

拡張メソッドは実行時に挿入されません。 – Tipx

+0

Eric Lippertの[パターンに従ってください](http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx)をお読みください。理由を説明します。 – Eranga

答えて

15

IEnumerableにメソッドを追加すると、IEnumerableから派生したすべての型がそれ自身を実装する必要があることを意味します。拡張メソッドでは、実装をインタフェースに並べ替えることができます。

他の副作用は、Linqが導入されたときに.NET 2.0で書かれたコードがまだ3.0でコンパイルされるということです。それ以外の場合は、IEnumerableをプロジェクトのどこかに実装していれば、新しいメソッドをすべてインターフェイスに実装する必要があります。

Linq ToオブジェクトのLINQメソッドは、Enumerableクラスで定義されています。

さらに、LINQは、特定の構文を使用して宣言され、インターフェイスまたはクラスベースではないメソッドを検索します。 Jon SkeetのEdulinqシリーズが興味深いかもしれません。

MSDNリンクの延長方法。

+2

それは上品な説明です。そして確かに、ジョンズの記事は一流です! – Zenwalker