Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ方法是扩展方法吗?_C#_.net_Linq_Extension Methods - Fatal编程技术网

C# 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

我想了解LINQ,并对这个问题进行了一些研究,发现
IEnumerable
IQueryable
都有LINQ方法。然而,当我查看这些类型的文档时,我没有看到任何LINQ方法


是在运行时插入到
IEnumerable/IQueryable
类型中的LINQ方法扩展方法吗?如果是,原因是什么?

在IEnumerable上添加方法意味着从IEnumerable派生的所有类型都必须自己实现它们。现在,通过扩展方法,我们可以将实现添加到接口中

另一个副作用是,在引入Linq时,用.NET2.0编写的代码仍将使用3.0进行编译。否则,如果您在项目中的某个地方实现了IEnumerable,那么您现在也必须实现接口中的所有新方法

LINQ To对象的LINQ方法在类上定义

此外,LINQ搜索使用特定语法声明的方法,这些方法不是基于接口或类的。你可能会发现Jon Skeet系列很有趣


关于扩展方法的链接。

这似乎是一个会得到固执己见答案的问题。我认为您即将开始一场火焰之战。扩展方法不会在运行时插入。由Eric Lippert阅读。解释原因。LINQ方法是扩展方法,是的,但它们不会“在运行时插入”到任何内容中。扩展方法是编译时概念,而不是运行时概念。扩展方法只是编写静态方法调用的方便语法;它在运行时对类型系统没有影响。这是经典的解释。当然,乔恩的文章是一流的!