StringBuilder真的比Aggreggate快吗?

bev*_*qua 3 c# string

        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)

但大多数时候它.只是.不.物!