C#语言的哪个部分是.ForEach()?

时间:2010-07-19 13:18:46

标签: c# linq nomenclature

如果我向某人解释以下ForEach功能,是否准确地说#2是“ LINQ foreach方法”或者它只是“ {{1} }扩展方法“这与LINQ没有正式关联?

List<T>

6 个答案:

答案 0 :(得分:24)

it is a normal method of List<T>虽然人们经常为其他IEnumerable<T>提供自己的扩展方法。 LINQ does not provide a ForEach extension由于其设计目标是功能性/使用不可变类型,ForEach本身就是一种副作用/命令式操作。

答案 1 :(得分:10)

它与LINQ无关,它不是扩展方法。

ForEachList<T>类上的普通实例方法。

(如果你真的很挑剔,那么ForEach根本不是C#语言的一部分:它是.NET基类库的一部分。)

答案 2 :(得分:2)

它不是List<T>的扩展方法,它是List<T>的常规方法。

所以它与LINQ无关。如果有的话,“与LINQ正式关联”与LINQ官方关联之间的区别实际上并不是非常有用的。 LINQ只是一堆链式扩展方法(通常在IEnumerable<T>上)。在IEnumerable<T>上区别于其他扩展方法几乎没有任何意义。最好的区别是它们位于System.LinqSystem.Something.Linq名称空间之一。

答案 3 :(得分:2)

这不是LINQ。 LINQ的一个设计方面是标准LINQ方法没有副作用。 ForEach方法会违反这一点。

Eric Lippert有一篇关于此的博客文章:

http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

答案 4 :(得分:1)

youngCustomers.ToList().ForEach(c => Console.WriteLine(c.Display())); 

让我们分解一下:

  • ToList是对.net framework 3.5
  • 中引入的System.Linq.Enumerable.ToList()的调用
  • ForEach是对.net framework 2.0
  • 中引入的System.Collections.Generic.List<T>.ForEach的调用
  • c =>是c#3.0中引入的lambda表达式语法。

如果查看List<T>.ForEach的文档,可以看到当时需要的旧委托语法来调用它。

答案 5 :(得分:0)

在Visual Studio 2010的Linq扩展中提供了副作用foreach。