让Enumerable可以具有each方式的语法。

这两天刚学Linq,发现Linq语法中的Any,All使用起来比较简洁。此时想起来js库中的each语法吗,确实比较好用。那么我们能否在C#达到类似的效果呢?经过一阵探索,发现强大的C#确实可以实现。

第一条路,看看有没有现成的

首先,我要看看C#本身是否支持该功能呢(要是支持,我的努力岂不是白费了),尝试多次,C#本身不具有该该语法的支持。而且Baidu(Google已经放弃我们了,我也决定放弃它了)到的一片文章《Allow linq-ified 'for each' statements》中貌似可以看到,到目前为止,甚至在C#4.0之前,我们没有这个希望了。于是我尝试自己来实现。

第二条路:自己实现。

查看了一下Linq中Any和All的语法,发现,原来他们都是利用C#本身的特性实现的,其格式如下:

public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

于是我经过改头换面,终于实现了我自己的Each方法如下,

 

1         public static void Each<TSource>(this IEnumerable<TSource> source, Action<TSource> execute)
2         {
3             foreach (var ts in source)
4             {
5                 execute(ts);
6             }
7         }

 

这样,我可以采用Each语法了,如下是我的例子:

 

1 trList.Each(tr => staticRankInfo.Add(new StaticRankRow(tr)));

 

哈哈,原来如此简单,以后这就是我就要用这个语法来代替foreach语句了。

其实大家可以实现其它更加花哨的功能。

 

PS:与日俱进,哈哈,今天学习Linq发现其实人家早就有这个语法了,叫ForEach。

与日俱进。

posted @ 2010-02-02 15:18  Sangplus  阅读(470)  评论(1编辑  收藏  举报