首页 > 解决方案 > StringBuilder - 是否应该只使用 Append 和 AppendLine 而不在参数中组合字符串?

问题描述

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

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

如果我在函数的参数中使用此运算符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);

这个对吗?

标签: c#stringstringbuilder

解决方案


您在第二个示例中有一个错误,因为您错过了 "Today I saw a" 和animal1. 除非您以过度的方式执行此操作(在具有多次迭代的循环中),否则您可能不会发现任何可测量的差异,因此您最好的选择可能是以可读性为目标。

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

是的,我a也在第二只动物之前添加了一个 :) 不过我不处理“an”的案例。

AppendFormat如果您想对所有这些附加内容不那么冗长,您还可以选择使用...

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

推荐阅读