将字符串列表转换为单个连接字符串的最快方法?

jas*_*onh 9 c# string extension-methods linq-to-objects

我有一些LINQ代码生成一个字符串列表,如下所示:

var data = from a in someOtherList
           orderby a
           select FunctionThatReturnsString(a);
Run Code Online (Sandbox Code Playgroud)

如何将该字符串列表转换为一个大的连接字符串?假设数据包含以下条目:

"Some "
"resulting "
"data here."
Run Code Online (Sandbox Code Playgroud)

我应该得到一个看起来像这样的字符串:

"Some resulting data here."
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我想到了这个:

StringBuilder sb = new StringBuilder();
data.ToList().ForEach(s => sb.Append(s));
string result = sb.ToString();
Run Code Online (Sandbox Code Playgroud)

但这似乎并不合适.如果它是正确的解决方案,我将如何将其转换为扩展方法?

Mar*_*ell 22

怎么样:

public static string Concat(this IEnumerable<string> source) {
    StringBuilder sb = new StringBuilder();
    foreach(string s in source) {
        sb.Append(s);
    }
    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

和:

string s = data.Concat();
Run Code Online (Sandbox Code Playgroud)

这就不需要额外ToList()/ ToArray()步骤了.


Jar*_*Par 16

你试过String.Join吗?如果您已经愿意承担.ToList调用的开销,那么使用.ToArray()并将其与对String.Join的调用相结合.

var joined = String.Concat(someQuery.ToArray());
Run Code Online (Sandbox Code Playgroud)

注意:我的解决方案可能不是最快的,因为它涉及阵列中的一些开销.我的怀疑是,走Marc的路线会更快.但在大多数情况下,如果您只是在寻找快速而肮脏的方式在代码中执行此操作,我的路线将起作用.

  • 有什么特别的理由不使用`string.Concat`? (2认同)