解释C#聚合行为

解释C#聚合行为,c#,C#,我正在努力学习C#,并使用聚合。我可以在Javascript中使用reduce,但由于某些原因,我无法让代码运行 我的最终目标是获取一个字符列表(都是数字),将它们转换为数字,对它们进行聚合,然后返回一个值。不过现在,我只想让聚合开始工作 在进行任何聚合之前,我设置了这个参数:int[]test={1,2,3,4,5} 当我有此代码时: int result = test.Aggregate ((current, total) => { current += 1; curr

我正在努力学习C#,并使用聚合。我可以在Javascript中使用reduce,但由于某些原因,我无法让代码运行

我的最终目标是获取一个字符列表(都是数字),将它们转换为数字,对它们进行聚合,然后返回一个值。不过现在,我只想让聚合开始工作

在进行任何聚合之前,我设置了这个参数:
int[]test={1,2,3,4,5}

当我有此代码时:

int result = test.Aggregate ((current, total) => {
    current += 1;
    current + total;
});
我被告知:“只能将赋值、调用、递增、递减和新对象表达式用作语句” 但是,我看到了多行lambda函数的示例

我可以删除
当前+=1行和花括号,它会工作,但我的目标是在每次聚合之前运行几件事情


如何让lambda表达式执行多行代码?

current+total
在该上下文中无效。它只对没有花括号的单行lambda有效。否则,您需要显式的
return
语句

您需要将其重新表述为
returncurrent+total


如果不使用大括号,则返回是隐式的。

返回值并使用大括号的lambda需要“return”语句:

int[] test = { 1, 2, 3, 4, 5 };

            int result = test.Aggregate((current, total) =>
            {
                current += 1;
                current += total;

                return current;
            });

我是个傻瓜。好的,所以添加返回是有效的。你能解释一下为什么当lambda包在{}中时,我需要返回。但是当它是一行时,返回是无效的?这只是一个编译器特性,在没有大括号的单行版本中,不带return语句的简写形式是允许的。