我有一个像
这样的列表“test”,“bla”,“something”,“else”
但是当我在它上面使用Aggrate并且同时调用一个函数时,我认为在2'迭代后'第一个的结果传入了吗?
我正在使用它:
myList.Aggregate((current, next) => someMethod(current) + ", "+ someMethod(next));
当我在someMethod函数中放置一个断点,其中myList中的信息发生了一些转换时,我注意到在第三次调用之后,我从前转换得到了一个结果作为输入参数。
答案 0 :(得分:1)
这就是它打算工作的方式。
你标记为当前的东西,它意味着到目前为止已经积累的所有内容。在第一次调用时,种子是第一个元素。
您可以执行以下操作:
var res = myList
.Aggregate(String.Empty, (accumulated, next) => accumulated+ ", "+ someMethod(next))
.Substring(2);//take out the first ", "
这样,你只对每个元素应用someMethod一次。
答案 1 :(得分:0)
如果我的列表是字符串列表,并且我只想返回/操作某些项目,我通常会这样做:
var NewCollection = MyStringCollection
//filter with where clause
.Where(StringItem => StringItem == "xyz"
//select/manipulate with aggregate
.Aggregate(default(string.empty), (av, e) =>
{
//do stuff
return av ?? e;
});