string c = tmpArr[0].Aggregate(string.Empty, (current, m) => current + (m.Name + " "));
StringBuilder sb = new StringBuilder();
foreach (Mobile m in tmpArr[0])
sb.Append(m.Name + " ");
sb.ToString();
Run Code Online (Sandbox Code Playgroud)
哪两个更快?聚合肯定是更干净,但它是快速还是与做的一样
foreach(Mobile m in tmpArr[0])
c += m.Name + " ";
Run Code Online (Sandbox Code Playgroud)
我真正想做的事情就是这样string.Join(",",tmpArr[0]),但我不想让它连接他们的ToString值,只是他们的名字,我怎么能做到最好?
我没有使用的问题string.Join是我实际上必须做这样的事情:
string separator = "";
StringBuilder sb = new StringBuilder();
foreach (Mobile m in tmpArr[0])
{
separator = ", ";
sb.Append(separator + m.Name);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 12
如果在循环(c += m.Name + " ";)中附加字符串,则会导致创建大量中间字符串; 这会导致"伸缩"内存使用,并给GC带来额外负担.Aggregate与StringBuilder的fluent-API混合在一起可以提供帮助 - 但是与StringBuilder循环一样.重要的不是聚合:它不会创建大量的中间字符串.
例如,我会使用:
foreach (Mobile m in tmpArr[0])
sb.Append(m.Name).Append(" ");
Run Code Online (Sandbox Code Playgroud)
更少; p
对于在Aggregate中使用StringBuilder的类似示例:
string c = tmpArr[0].Aggregate(new StringBuilder(),
(current, m) => current.Append(m.Name).Append(" ")).ToString();
Run Code Online (Sandbox Code Playgroud)
Jon*_*röm 10
我不希望它连接他们的ToString值,只是他们的名字,我怎么能做到最好?
string.Join(",",tmpArr[0].Select(t => t.Name).ToArray())
Run Code Online (Sandbox Code Playgroud)
但大多数时候它.只是.不.物!