我有Ienumerable<string>
集合,我希望将其连接成带分隔符的单个字符串;
例如{“One”,“Two”,“Three”} - &gt; “一;二;三;”
是否可以使用以下功能?
List<string> list = new List<string>(){"One","Two","Three"};
list.Aggregate<String>((x,y) => x + String.Format("{0};",y));
我也试过这段代码:
list.Aggregate<String>((x,y) => String.Format("{0};{1}",x,y));
两个样本都不起作用。
编辑:我发现在Linq-2-sql中使用Linq-2-sql或Aggregate函数不可能做我想做的事。EDIT2:我使用的解决方法是检查原始linq查询返回的项目...并将它们复制到新列表并按照以下答案中的linq对象而不是linq-2的建议进行连接-sql对象。
答案 0 :(得分:4)
您可以使用String.Join
。如果您使用的是.NET4,则可以直接使用the overload that takes an IEnumerable<string>
:
string joined = string.Join(";", list);
如果您使用的是旧版本的框架,那么您需要使用the overload that takes a string[]
array代替,必要时首先将您的集合转换为数组:
string joined = string.Join(";", list.ToArray());
修改... 强>
当然,如果你真的想出于某种原因使用Aggregate
那么就没有什么能阻止你了。如果是这样,通常建议使用StringBuilder
而不是多个字符串分配来构建字符串:
string joined = list.Aggregate(new StringBuilder(),
(sb, s) => sb.Append(s).Append(';'),
sb => (sb.Length > 0) ? sb.ToString(0, sb.Length - 1)
: "");
答案 1 :(得分:1)
您需要提供初始值设定项,否则第一个元素不会添加;
:
list.Aggregate<String>("", (x,y) => x + String.Format("{0};",y));
答案 2 :(得分:1)
您可以使用以下代码
来完成list.Aggregate((i, j) => i + ";" + j);