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