is there a .Each() (or .ForEach() ) iterator in the .Net standard library?
Possible Duplicate:
LINQ equivalent of foreach for IEnumerable
我想知道.NET库中是否有类似以下.each()的IEnumerable方法
1 2 |
我知道我可以使用
1 2 3 4 5 6 7 8 9 10 | public static class EnumerableExtensions { public static void Each<T>(this IEnumerable<T> enumberable, Action<T> action) { foreach (var item in enumberable) { action(item); } } } |
但是,如果库中已经有这样的扩展方法,我希望不要创建自己的方法来破坏代码。类似于.each()(带有一些可以将条件作为额外参数的重载)的东西是程序员非常需要的,而且应该已经有了一个。我说的对吗?
更新
Ruby开发人员可以将其识别为.each()迭代器。这就是我希望在C中得到的。也许C可以有更多类似于Ruby的迭代器方法。
正如其他人所说,
下面是有关plinq的一般指南:http://msdn.microsoft.com/en-us/library/dd460688.aspx
如果你在parallelenumerable一节中随便翻一翻,我就找不到确切的文章,但它给出了关于如何提高代码中使用并行性的性能的警告和提示。
如果需要,我建议创建两个版本,一个包含索引器,另一个不包含索引器。这是非常有用的,可以保存一个select语句来获取索引。例如
1 2 3 4 5 6 7 8 9 10 | public static void ForEach<T>(IEnumerable<T> enumerable,Action<T> action) { foreach(var item in enumerable) action(item); } public static void ForEach<T>(IEnumerable<T> enumerable,Action<T,int> action) { int index = 0; foreach(var item in enumerable) action(item,index++); } |
我还将包括参数验证,因为这些是公共方法。
是的。
1 | someList.ForEach(x => Console.WriteLine(x)); |
或者使用数组:
1 | Array.ForEach(someArray, x => Console.WriteLine(x)); |
注意,在上一个示例中,您必须对数组类调用静态方法
edit:命名空间为:System.Collections.Generic(对于列表方法)和System(对于数组方法)
System.Collections.List上有foreach方法,但IEnumerable上没有。注意,这也不是Linq的一部分(它已经存在于.NET 2.0中)。
乍一看,您会认为这是LINQ的一部分,因为它是普通列表功能的一种扩展。然而,LINQ更多的是分组、过滤和转换数据。如果你仔细看,大多数(如果不是所有的话,我不是Jon Skeet,我不知道这些东西的心脏!)LINQ方法返回某种可枚举的。
然而,你可能想看看莫里林。这是一个开源项目,它向现有的LINQ对象添加了一些关键特性,其中一个是您想要的FrACH方法(在这种情况下,在任何iQueDead上工作,因此它也将在您的数组上工作)。
不,很遗憾没有。(我想这个问题以前已经讨论过了,但现在找不到。)
由于历史上发生了一些奇怪的事故,
自从扩展方法存在以来,一次又一次地请求添加一个
因此,现在地球上几乎所有的.NET项目都是从上面描述的代码开始的:
1 2 3 4 5 6 7 8 9 10 | namespace IEnumerableExtensions { public static class IEnumerableExtensions { public static void ForEach<T>(this IEnumerable<T> xs, Action<T> f) { foreach (var x in xs) f(x); } } } |
它取决于框架版本
.NET 3.5和4.0具有
只有