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的路线会更快.但在大多数情况下,如果您只是在寻找快速而肮脏的方式在代码中执行此操作,我的路线将起作用.