List.Aggregate意外结果

时间:2012-05-29 20:11:51

标签: .net string list aggregate

当我运行此代码时:

List<string> list = new List<string>();
list.Add("a");
list.Add("b");
list.Add("c");
list.Add("d");

string s = list.Aggregate((total, item) => total += item + ",");

我希望s为:

a,b,c,d,

但相反,s是:

ab,c,d,

有谁可以告诉我为什么它不会在第一个和第二个索引之间添加逗号?

由于

3 个答案:

答案 0 :(得分:3)

你会发现这是有效的

string s = list.Aggregate(string.Empty, (total, item) => total += item + ",");

如果你测试一下,你可以看到原因:

var total = "a";
var item = "b";
var s = total += item + ",";

这导致“ab”,

使用total的初始空种子值((string)null或string.Empty)将为您提供预期的结果。

答案 1 :(得分:2)

以下Aggregate重载将起作用:

string s = list.Aggregate<string, string>(null, (total, item) => total + item + ",");

基本上,您使用的版本会使用&#34; a&#34;作为total的值作为初始条件,然后使用提供的lambda附加其余部分。我的版本使用null启动总计,然后将每个项目附加到。

答案 2 :(得分:1)

尝试并且工作

string s = list.Aggregate((total, item) => total += "," + item); 

问题是:当运行时第一次调用Aggregate Func total是&#34; a&#34;和项目是&#34; b&#34;。实际上,这个扩展旨在执行计算而不是连接字符串。

但请注意,结果字符串是a,b,c,d(没有结尾逗号)我不知道这是否优先(取决于你对结果字符串的使用)