Silentdoer

导航

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编辑  收藏  举报