不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
Linq累加器函数Aggregate执行原理分析
编辑:dnawo 日期:2013-07-11
重载1:public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func)
示例
结果

分析
参数a保存func函数上次执行结果,a初始值为集合第一个元素,集合元素从第二个开始依次传给b到func函数进行运算,最后返回a的值。
重载2:public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func)
示例
结果

分析
参数a保存func函数上次执行结果,a初始值为种子值,集合元素从第一个开始依次传给b到func函数进行运算,最后返回a的值。
重载3:public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector)
示例
结果

分析
参数a保存func函数上次执行结果,a初始值为种子值,集合元素从第一个开始依次传给b到func函数进行运算,最后将a的值传给c到resultSelector进行运算并返回。
示例
复制内容到剪贴板
程序代码

List<int> ids = new List<int>() { 1, 2, 3, 4 };
string str1 = string.Empty, str2 = string.Empty;
int result = ids.Aggregate((a, b) => { str1 += a + "\t"; str2 += b + "\t"; return a + b; });
Console.WriteLine("a:{0}\r\nb:{1}\r\nresult:{2}", str1, str2, result);
string str1 = string.Empty, str2 = string.Empty;
int result = ids.Aggregate((a, b) => { str1 += a + "\t"; str2 += b + "\t"; return a + b; });
Console.WriteLine("a:{0}\r\nb:{1}\r\nresult:{2}", str1, str2, result);
结果

分析
参数a保存func函数上次执行结果,a初始值为集合第一个元素,集合元素从第二个开始依次传给b到func函数进行运算,最后返回a的值。
重载2:public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func)
示例
复制内容到剪贴板
程序代码

List<int> ids = new List<int>() { 1, 2, 3, 4 };
string str1 = string.Empty, str2 = string.Empty;
int result = ids.Aggregate(0, (a, b) => { str1 += a + "\t"; str2 += b + "\t"; return a + b; });
Console.WriteLine("a:{0}\r\nb:{1}\r\nresult:{2}", str1, str2, result);
string str1 = string.Empty, str2 = string.Empty;
int result = ids.Aggregate(0, (a, b) => { str1 += a + "\t"; str2 += b + "\t"; return a + b; });
Console.WriteLine("a:{0}\r\nb:{1}\r\nresult:{2}", str1, str2, result);
结果

分析
参数a保存func函数上次执行结果,a初始值为种子值,集合元素从第一个开始依次传给b到func函数进行运算,最后返回a的值。
重载3:public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector)
示例
复制内容到剪贴板
程序代码

List<int> ids = new List<int>() { 1, 2, 3, 4 };
string str1 = string.Empty, str2 = string.Empty, str3 = string.Empty;
int result = ids.Aggregate(0, (a, b) => { str1 += a + "\t"; str2 += b + "\t"; return a + b; }, c => { str3 += c + "\t"; return c + 5; });
Console.WriteLine("a:{0}\r\nb:{1}\r\nc:{2}\r\nresult:{3}", str1, str2, str3, result);
string str1 = string.Empty, str2 = string.Empty, str3 = string.Empty;
int result = ids.Aggregate(0, (a, b) => { str1 += a + "\t"; str2 += b + "\t"; return a + b; }, c => { str3 += c + "\t"; return c + 5; });
Console.WriteLine("a:{0}\r\nb:{1}\r\nc:{2}\r\nresult:{3}", str1, str2, str3, result);
结果

分析
参数a保存func函数上次执行结果,a初始值为种子值,集合元素从第一个开始依次传给b到func函数进行运算,最后将a的值传给c到resultSelector进行运算并返回。
评论: 0 | 引用: 0 | 查看次数: 4945
发表评论
请登录后再发表评论!