我已经开始使用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);


它是否正确?

最佳答案

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

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


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

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

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

关于c# - StringBuilder-应该仅使用Append和AppendLine而不在参数中组合字符串吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53958066/

10-12 12:39
查看更多