让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 }
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。
与日俱进。