有没有办法追加两个字符串构建器?如果是这样 - 它是否比将字符串附加到StringBuilder更好?
Mar*_*urd 31
我知道这是三年之后,但StringBuilder无论如何.NET 4的表现都不同.
尽管如此,它仍然会回到"你想做什么?" 您是否正在寻找最有效的方法来追加两个StringBuilders并继续使用后者的结果?或者您是否希望继续使用附加的现有缓冲值StringBuilder?
对于前者,始终在.NET 4中,
frontStringBuilder.Append(backStringBuilder);
Run Code Online (Sandbox Code Playgroud)
是最好的.
对于.NET 2/3.5中的后一种情况,
frontStringBuilder.Append(backStringBuilder.ToString(0, backStringBuilder.Length));
Run Code Online (Sandbox Code Playgroud)
是最好的(并且不会损害.NET 4中的性能).
Gau*_*wal 20
就像那样....
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
sb.Append(sb1.ToString());
Run Code Online (Sandbox Code Playgroud)
Ond*_*lka 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]);
}
Run Code Online (Sandbox Code Playgroud)
Nig*_*ist 10
您不需要调用.ToString().你应该简单地将一个追加到另一个.就这样.对于直接.ToString()调用它会更好,原因如下:
1)StringBuilder没有StringBuilder的构造函数作为param,string,int/string等.CtringBuilder重写.ToString(),结果如下:
StringBuilder sb1 = new StringBuilder("1");
sb1.Append(new StringBuilder("2"));
Console.WriteLine(sb1);
Run Code Online (Sandbox Code Playgroud)
该代码将自动调用.ToString()的覆盖版本.输出为"12";
2)如果StringBuilder将作为传入参数添加到下一个框架版本中的StringBuilder构造函数中,那么您的代码将清晰并准备好进行正确的追加而不进行任何重构.
祝你有美好的一天!
就像那样:
firstStringBuilder.Append(secondStringBuilder.ToString());
Run Code Online (Sandbox Code Playgroud)
如果 StringBuilder 很大,那么这将最大限度地减少字符串分配(特别是如果您可以提供可重用的字符缓冲区):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37319 次 |
| 最近记录: |