2011-08-21 126 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派生的所有類型都必須自己實現它們。現在使用擴展方法,我們可以將實現添加到接口中。

另一個副作用是,在.NET 2.0中編寫的代碼仍然會在Linq引入時用3.0編譯。否則,如果你已經在你的項目的某個地方實現了IEnumerable,你現在必須在接口中實現所有的新方法。

Linq To Objects的LINQ方法在Enumerable類中定義。此外,LINQ搜索使用特定語法聲明的方法,而不是基於接口或類的方法。你可能會發現Jon Skeet的Edulinq系列有趣。

MSDN關於擴展方法的鏈接。

+2

這就是優雅的解釋。當然,jons的文章是頂尖的! – Zenwalker