为IEnumerable扩展一个ForEach方法

Posted Insus.NET

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为IEnumerable扩展一个ForEach方法相关的知识,希望对你有一定的参考价值。

IEnumerable没有一个ForEach方法,我们可以使用C#写一个扩展方法:
技术分享


Source Code:

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Insus.NET.ExtendMethods
{
  public static class Enumerables
    {        
        public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
        {
            foreach (T item in source)
            {
                action(item);
            }
        }
    }
}
View Code

 

下例中,Insus.NET列举一个IEnumerable数据集,然后使用这个方法来获取其中的元素:
技术分享


Source Code:

技术分享
public IEnumerable<IDictionary<string, object>> Links()
        {
            var dict = new Dictionary<string, object>();
            dict["Index"] = "新产品介绍";
            dict["Manufacturing"] = "制造能力/流程";
            dict["DieCasting"] = "压铸";
            dict["Machining"] = "加工";
            dict["AssemblyFinishing"] = "组装&成品";
            dict["TestReliability"] = "测试和可靠性";
            dict["KeyCustomer"] = "关键客户";
            yield return dict;
        }
View Code

 

ForEach方法应用:
技术分享

 

Source Code:

技术分享
obj.Links().ForEach(delegate (IDictionary<string, object> dict) {
            foreach (KeyValuePair<string, object> kvp in dict)
            {
                    //kvp.Key
                    //kvp.Value
            }
        });
View Code

 

以上是关于为IEnumerable扩展一个ForEach方法的主要内容,如果未能解决你的问题,请参考以下文章

foreach遍历访问的对象必须实现IEnumerable 或声明GetEnumerator

IEnumerable<T>是啥意思?

Parallel.ForEach() 与 foreach(IEnumerable<T>.AsParallel())

IEnumerable & IEnumerator

C# 使用IEnumerable,yield 返回结果,同时使用foreach时,在循环内修改变量的值无效

foreach和IEnumerable+yield和IEnumerator