小编典典

使用 LINQ 连接字符串

all

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

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


阅读 78

收藏
2022-03-28

共1个答案

小编典典

此答案显示了问题中要求的 LINQ (Aggregate) 的用法,不适合日常使用。因为这不使用
aStringBuilder它对于很长的序列会有可怕的性能。对于常规代码使用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

 var res = words.Aggregate(
     new StringBuilder(), 
     (current, next) => current.Append(current.Length == 0? "" : ", ").Append(next))
     .ToString();
2022-03-28