C#Lambda表达式Aggregate的用法及内部运行方式的猜想
var nums = new int[] { 1, 2, 3, 4, 5 }; // 其和为15 var count = nums.Aggregate((body, next) => { // 注意,nums的元素个数至少一个以上(但如果是有seed的模式,是可以为0个元素的)才能执行Aggregate,但是C#是允许 new int[0];的。 // 只输出了4次,且第一次输出是:1#2,最后一次输出是:10#5 // 得出 没seed的 Aggregate(...)累加执行次数是 nums.Length-1 次。 // 它的执行方式的可能性之一:系统默认先将第一个元素赋值给body(因为body的类型和next是一致的),然后游标下标index值变为1 // 步骤X:判断是否存在nums[index],如果存在则将nums[index]赋给next并执行lambda表达式, // 然后将lambda表达式的 返回值 赋值给body(故不需要body+=next),游标下标index+=1 ; // 如此循环上面的步骤X执行直到index下标对应的nums元素不存在为止。 Console.WriteLine(body + "#" + next); return body + next; }); Console.WriteLine("最终结果是:" + count); // 输出15没错。
posted on 2017-01-11 15:27 Silentdoer 阅读(2552) 评论(0) 编辑 收藏 举报