2011-08-21 13 views
7

Quiero entender LINQ e investigué un poco sobre el asunto y descubrí que IEnumerable y IQueryable tienen métodos LINQ. Sin embargo, cuando miro la documentación de estos tipos, no veo ningún método LINQ.¿Los métodos LINQ son métodos de extensión?

Son los métodos de extensión de métodos LINQ que se insertan en los tipos IEnumerable/IQueryable en tiempo de ejecución y, en caso afirmativo, ¿por qué?

+0

Esto parece una pregunta que va a obtener respuestas obstinadas. Creo que estás a punto de comenzar una guerra de llamas. – jonathanpeppers

+0

Los métodos de extensión no se insertan en el tiempo de ejecución. – Tipx

+0

Leer [Seguir el patrón] (http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx) por Eric Lippert. Explica las razones – Eranga

Respuesta

15

Agregar los métodos en IEnumerable significaría que todos los tipos que se derivan de IEnumerable tendrían que implementarlos ellos mismos. Ahora con los métodos de extensiones podemos agregar implementaciones a las interfaces.

Otro efecto secundario sería que el código escrito en .NET 2.0 todavía compilaría con 3.0 cuando se introdujo Linq. De lo contrario, si hubiera implementado IEnumerable en algún lugar de su proyecto, ahora también tendría que implementar todos los métodos nuevos en la interfaz.

Los métodos LINQ para Linq To Objects se definen en la clase Enumerable.

Además, LINQ busca métodos que se declaran utilizando una sintaxis específica y que no están basados ​​en clases o interfaces. Puede encontrar interesante la serie Edulinq de Jon Skeet.

MSDN enlace en los métodos de extensión.

+2

eso es una explicación con clase. ¡Y seguro, los artículos de Jon son de primera clase! – Zenwalker

Cuestiones relacionadas