.Net标准库中有.Each()(或.ForEach())迭代器吗?

Shu*_*huo 14 .net c#

可能重复:
LINQ等效于IEnumerable <T>的foreach

我想知道是否有一个IEnumerable的方法,如.Net库中的以下.Each()

var intArray = new [] {1, 2, 3, 4};
intArrary.Each(Console.WriteLine);
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用foreach循环或轻松编写这样的扩展方法:

public static class EnumerableExtensions
{
    public static void Each<T>(this IEnumerable<T> enumberable, Action<T> action)
    {
        foreach (var item in enumberable)
        {
            action(item);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果库中已经有这样的扩展方法,我希望不要创建自己的方法来搞乱代码.类似.Each()(带有一些可能需要条件作为额外参数的重载)的程序员非常需要它,而且应该已经有了一个.我对么?

更新

Ruby开发人员可能会将其识别为.each()迭代器.这就是我希望在C#中拥有的东西.也许C#可以拥有更多像Ruby那样的迭代器方法.

Mic*_*l B 10

正如其他人所说,没有内置IEnumerable<T>.根据Eric Lippert的帖子,Linq团队反对它:http: //blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

有一个静态方法,Array.ForEachList<T>有一个实例方法.在PLINQ foreach中也有类似的声明,但要注意它们并行工作,并且可能导致非常简单的操作的非常糟糕的性能.以下是PLINQ中的一种方法:http://msdn.microsoft.com/en-us/library/dd383744.aspx

以下是PLINQ的一般指南:http://msdn.microsoft.com/en-us/library/dd460688.aspx

虽然如果您在ParrallelEnumerable部分中找不到确切的文章,但它提供了有关如何提高在代码中使用并行性的性能的警告和提示

如果你想要它,我建议创建2个版本,一个包含索引器,一个没有.这非常有用,可以保存select语句来获取索引.例如

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++);
}
Run Code Online (Sandbox Code Playgroud)

我还包括参数验证,因为这些是公共方法.


Rap*_*ael 5

就在这里.

someList.ForEach(x => Console.WriteLine(x));
Run Code Online (Sandbox Code Playgroud)

或者使用数组:

Array.ForEach(someArray, x => Console.WriteLine(x));
Run Code Online (Sandbox Code Playgroud)

请注意,在最后一个示例中,您必须在Array类上调用静态方法

编辑:名称空间是:List方法的System.Collections.Generic和Array方法的System