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