StringBuilder-应该仅使用Append和AppendLine而不在参数中组合字符串吗?

时间:2018-12-28 11:43:17

标签: c# string stringbuilder

我已经开始使用StringBuilder,因为我听说它在输出字符串方面更加优化。

我的问题是关于+的使用,因为字符串是不可变的,将它们添加到一起时会分配一个新的字符串。

如果我在StringBuilder.Append函数的参数中使用此运算符,则我认为它实际上具有相同的开销。

例如:

string animal1 = "dog";
string animal2 = "cat";

stringBuilder.Append("Today I saw a " + animal1 + " and " + animal2);

我的猜测是,这可能会将这些文本串联在一起以分配内存。

我认为更有效(尽管很冗长)的方法是:

stringBuilder.Append("Today I saw a");
stringBuilder.Append(animal1);
stringBuilder.Append(" and ");
stringBuilder.Append(animal2);

这正确吗?

2 个答案:

答案 0 :(得分:2)

第二个示例中有一个错误,因为您错过了“今天我看到一个”和animal1之间的空格。除非您过度执行此操作(在多次迭代的循环内),否则可能不会发现可测量的差异,因此您最好的选择可能是为了提高可读性。

$"Today I saw a {animal1} and a {animal2}"

是的,我也在第二个动物之前添加了a :)虽然我不处理“ an”的情况。

如果您希望所有附加内容都不再那么冗长,也可以选择使用AppendFormat ...

stringBuilder.AppendFormat("Today I saw a {0} and a {1}", animal1, animal2);

答案 1 :(得分:1)

串联这样的字符串会为新字符串分配内存,只是将其附加到您的StringBuilder上,这很浪费。如前所述,您应该明确地Append来代替它们。