如果我向某人解释以下ForEach功能,是否准确地说#2是“ LINQ foreach方法”或者它只是“ {{1} }扩展方法“这与LINQ没有正式关联?
List<T>
答案 0 :(得分:24)
it is a normal method of List<T>
虽然人们经常为其他IEnumerable<T>
提供自己的扩展方法。 LINQ does not provide a ForEach extension由于其设计目标是功能性/使用不可变类型,ForEach本身就是一种副作用/命令式操作。
答案 1 :(得分:10)
答案 2 :(得分:2)
它不是List<T>
的扩展方法,它是List<T>
的常规方法。
所以它与LINQ无关。如果有的话,“与LINQ正式关联”与LINQ官方关联之间的区别实际上并不是非常有用的。 LINQ只是一堆链式扩展方法(通常在IEnumerable<T>
上)。在IEnumerable<T>
上区别于其他扩展方法几乎没有任何意义。最好的区别是它们位于System.Linq
或System.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。