有没有办法追加两个字符串构建器? 如果是这样 - 它是否比将字符串附加到StringBuilder更好?
答案 0 :(得分:29)
我知道这是三年之后,但.NET 4 StringBuilder
无论如何都表现不同。
然而,它仍然会回到"你想做什么?"您是否正在寻找最简单的方法来追加两个StringBuilders
并继续使用后一个结果?或者您是否希望继续使用附加StringBuilder
的现有缓冲值?
对于前者,并且始终在.NET 4中,
frontStringBuilder.Append(backStringBuilder);
是最好的。
对于.NET 2 / 3.5中的后一种情况,
frontStringBuilder.Append(backStringBuilder.ToString(0, backStringBuilder.Length));
是最好的(并且在.NET 4中不会损害性能)。
答案 1 :(得分:20)
这将在没有分配的情况下完成
StringBuilder sb = new StringBuilder("aaaa");
StringBuilder second = new StringBuilder("bbbbb");
sb.EnsureCapacity(sb.Length + second.Length);
for (int i = 0; i < second.Length; i++)
{
sb.Append(second[i]);
}
答案 2 :(得分:19)
就像那样......
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
sb.Append(sb1.ToString());
答案 3 :(得分:9)
您无需调用.ToString()。你应该简单地将一个追加到另一个。就这样。最好不要直接使用.ToString()调用,原因如下:
1)StringBuilder没有StringBuilder的构造函数作为param,string,int / string等.CtringBuilder重写.ToString(),结果:
StringBuilder sb1 = new StringBuilder("1");
sb1.Append(new StringBuilder("2"));
Console.WriteLine(sb1);
该代码将自动调用.ToString()的覆盖版本。输出将为“12”;
2)如果在下一个框架版本中将StringBuilder作为传入参数添加到StringBuilder构造函数中,那么您的代码将清晰可用,无需任何重构即可正确添加。
祝你有个美好的一天!
答案 4 :(得分:6)
就像那样:
firstStringBuilder.Append(secondStringBuilder.ToString());
答案 5 :(得分:1)
如果StringBuilder很大,那么这将最小化字符串分配(特别是如果你可以提供一个可重用的char-buffer):
public static void CopyTo(this StringBuilder source, StringBuilder dest)
{
char[] buffer = new char[Math.Min(source.Length, 1024)];
CopyTo(source, dest, buffer);
}
public static void CopyTo(this StringBuilder source, StringBuilder dest, char[] buffer)
{
dest.EnsureCapacity(dest.Length + source.Length);
for (int i = 0; i < source.Length; i += buffer.Length)
{
int charCount = Math.Min(source.Length - i, buffer.Length);
source.CopyTo(i, buffer, 0, charCount);
dest.Append(buffer, 0, charCount);
}
}