为什么ForEach方法只在List集合上可用?

18 浏览
0 Comments

为什么ForEach方法只在List集合上可用?

这个问题已经有了答案

可能有重复:

为什么IEnumberable接口上没有一个ForEach扩展方法?

首先,我要明确我所指的是List方法而不是C#关键字。那么微软为什么会在List集合上提供Foreach方法,而在其他集合/可枚举类型上,特别是IEnumerable上没有提供?

我只是几天前发现了这个方法,并且发现它在取代传统的foreach循环,只对每个对象执行一两行方法时非常好用。

看起来很容易创建一个执行相同功能的扩展方法。我想了解为什么微软作出了这个决定,根据这个决定我是否应该创建一个扩展方法。

admin 更改状态以发布 2023年5月23日
0
0 Comments

阅读帮助设计编译器的人撰写的答案...http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

0
0 Comments

埃里克·利珀特已经多次回答了这个问题,其中包括他的博客

他的回答是,ForEach()是一个你明确使用副作用的东西,而LINQ主要是为了定义序列上的投影和操作而被使用的无副作用API。

除了像并行循环这样的用途外,函数式的ForEach语法在表达能力方面并没有太多的增加,而且由于委托调用,它比一个普通的foreach循环稍微不那么有效率。

如果你确实想要一个IEnumerableForEach,那么编写一个并不困难:

public static class ForEachExtension
{
    public static void ForEach( this IEnumerable seq, Action action )
    {
        foreach( var item in seq ) 
            action( item );
    }
    // Here's a lazy, streaming version:
    public static IEnumerable ForEachLazy( this IEnumerable seq, Action action )
    {
        foreach( var item in seq )
        {
            action( item );
            yield return item;
        }
    }
}

0