C# LINQ方法是扩展方法吗?
我想了解LINQ,并对这个问题进行了一些研究,发现C# LINQ方法是扩展方法吗?,c#,.net,linq,extension-methods,C#,.net,Linq,Extension Methods,我想了解LINQ,并对这个问题进行了一些研究,发现IEnumerable和IQueryable都有LINQ方法。然而,当我查看这些类型的文档时,我没有看到任何LINQ方法 是在运行时插入到IEnumerable/IQueryable类型中的LINQ方法扩展方法吗?如果是,原因是什么?在IEnumerable上添加方法意味着从IEnumerable派生的所有类型都必须自己实现它们。现在,通过扩展方法,我们可以将实现添加到接口中 另一个副作用是,在引入Linq时,用.NET2.0编写的代码仍将使用3
IEnumerable
和IQueryable
都有LINQ方法。然而,当我查看这些类型的文档时,我没有看到任何LINQ方法
是在运行时插入到
IEnumerable/IQueryable
类型中的LINQ方法扩展方法吗?如果是,原因是什么?在IEnumerable上添加方法意味着从IEnumerable派生的所有类型都必须自己实现它们。现在,通过扩展方法,我们可以将实现添加到接口中
另一个副作用是,在引入Linq时,用.NET2.0编写的代码仍将使用3.0进行编译。否则,如果您在项目中的某个地方实现了IEnumerable,那么您现在也必须实现接口中的所有新方法
LINQ To对象的LINQ方法在类上定义
此外,LINQ搜索使用特定语法声明的方法,这些方法不是基于接口或类的。你可能会发现Jon Skeet系列很有趣
关于扩展方法的链接。这似乎是一个会得到固执己见答案的问题。我认为您即将开始一场火焰之战。扩展方法不会在运行时插入。由Eric Lippert阅读。解释原因。LINQ方法是扩展方法,是的,但它们不会“在运行时插入”到任何内容中。扩展方法是编译时概念,而不是运行时概念。扩展方法只是编写静态方法调用的方便语法;它在运行时对类型系统没有影响。这是经典的解释。当然,乔恩的文章是一流的!