添加到字符串字段中

时间:2014-03-01 08:01:20

标签: c# string format tostring stringbuilder

告诉我这个代码C#有什么问题。

        string str = string.Empty;
        for (var i = 1; i <= 1000; i++)
            str += i.ToString();

这是面试问题。

2 个答案:

答案 0 :(得分:5)

实际上您的代码没有问题。

在这种情况下,StringBuilderstring更合适。

因为StringBuilder是可变的,而stringimmutable

因此,每当使用+=修改String对象时,它都会创建一个新的string对象,因此在循环结束时会创建许多字符串对象。

但如果您使用StringBuilder:每次附加Strings时,都会修改相同的对象。

您可以从MSDN找到更多信息:StringBuilder Class

  

String对象是不可变的。每次使用其中一种方法   在System.String类中,您在内存中创建一个新的字符串对象,   这需要为该新对象重新分配空间。在   您需要对a执行重复修改的情况   string,与创建新String对象相关的开销可以   很贵。您可以使用System.Text.StringBuilder类   想要在不创建新对象的情况下修改字符串。例如,   使用StringBuilder类可以在连接时提高性能   许多字符串在一个循环中。

解决方案:

这个

    string str = string.Empty;
    for (var i = 1; i <= 1000; i++)
        str += i.ToString();

应该这个

    StringBuilder str =new StringBuilder();
    for (var i = 1; i <= 1000; i++)
        str.Append(i.ToString());

答案 1 :(得分:1)

答案为here

the compiler can't do anything if you concatenate in a loop and this does generate a lot of garbage.