一尘不染

使用LINQ连接字符串

c#

写老派的最有效方法是什么:

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中?


阅读 262

收藏
2020-05-19

共1个答案

一尘不染

该答案显示Aggregate了问题中所要求的LINQ()的用法,并不打算用于日常使用。因为它不使用,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:聚合查询


如果您真的想使用CodeMonkeyKing的注释中建议的Aggregateuse变体,它将与常规代码相同,包括对大量对象的良好性能:StringBuilderString.Join

 var res = words.Aggregate(
     new StringBuilder(), 
     (current, next) => current.Append(current.Length == 0? "" : ", ").Append(next))
     .ToString();
2020-05-19