在C#中是否存在std :: for_each算法模拟(Linq to Objects)

Ale*_*sky 3 c# linq-to-objects

在C#(Linq to Objects)中是否有std :: for_each algoritm模拟,能够传入Func<>它吗?喜欢

sequence.Each(p => p.Some());
Run Code Online (Sandbox Code Playgroud)

代替

foreach(var elem in sequence)
{
  elem.Some();
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*mov 6

foreachC#语言本身有一个声明.

正如Jon 暗示的那样(并且Eric 明确指出),LINQ设计者希望保持方法无副作用,而ForEach违反合同.

实际上一个ForEach方法确实适用于谓词List<T>Array类,但它是在.NET Framework 2.0中引入的,而LINQ仅在3.5中引入.他们没有关系.

毕竟,您总是可以提出自己的扩展方法:

public static void ForEach<T> (this IEnumerable<T> enumeration, Action<T> action)
{
    foreach (T item in enumeration)
        action (item);
}
Run Code Online (Sandbox Code Playgroud)

我同意这在你已经有一个参数方法并且你想为每个元素运行它时很有用.

var list = new List<int> {1, 2, 3, 4, 5};
list.Where (n => n > 3)
    .ForEach (Console.WriteLine);
Run Code Online (Sandbox Code Playgroud)

然而在其他情况下,我相信好的' foreach更清洁和简洁.

顺便说一句,单参数空洞方法不是一个Func<T>而是一个Action<T>.
Func<T>表示返回TAction<T>表示void接受的方法的函数T.