当我运行此代码时:
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,
有谁可以告诉我为什么它不会在第一个和第二个索引之间添加逗号?
由于
答案 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(没有结尾逗号)我不知道这是否优先(取决于你对结果字符串的使用)