写老派最有效的方法是什么:
StringBuilder sb = new StringBuilder(); if (strings.Count > 0) { foreach (string s in strings) { sb.Append(s + ", "); } sb.Remove(sb.Length - 2, 2); } return sb.ToString();
…在 LINQ 中?
此答案显示了问题中要求的 LINQ (Aggregate) 的用法,不适合日常使用。因为这不使用 aStringBuilder它对于很长的序列会有可怕的性能。对于常规代码使用String.Join,如另一个答案所示
Aggregate
StringBuilder
String.Join
使用这样的聚合查询:
string[] words = { "one", "two", "three" }; var res = words.Aggregate( "", // start with empty string to handle empty list case. (current, next) => current + ", " + next); Console.WriteLine(res);
这输出:
, 一二三
聚合是一个函数,它接受一组值并返回一个标量值。T-SQL 中的示例包括 min、max 和 sum。VB 和 C# 都支持聚合。VB 和 C# 都支持聚合作为扩展方法。使用点表示法,只需调用IEnumerable对象上的方法。
请记住,聚合查询会立即执行。
更多信息 - MSDN:聚合查询
如果您真的想使用评论中提出的Aggregate使用变体,这将与常规代码大致相同,包括对大量对象的良好性能:StringBuilder``String.Join
StringBuilder``String.Join
var res = words.Aggregate( new StringBuilder(), (current, next) => current.Append(current.Length == 0? "" : ", ").Append(next)) .ToString();