最佳的复制 StringBuilder 的方式是什么?

3

如何在性能方面最好地从另一个 StringBuilder 实例化一个新的 StringBuilder?(复制构造函数)。

我不想通过不可变字符串传递,因为底层数据非常大。

所以下面的方法是有效的,但不是想要的。

StringBuilder newSB = new StringBuilder(oldSB.ToString());

我想要类似的东西

StringBuilder newSB = new StringBuilder(oldSB);

但是这不受支持。


8
为了做什么? - Caius Jard
问题在于字符串本质上是不可变的。看起来你想要在两个字符串之间“共享”子字符串,而且它很大,但实际上,如果这两个字符串构建器应该生成两个不同的字符串(即使其中一个是另一个的子集),那么恐怕无法实现你想做的事情。 - user2184057
2
我认为OP想要将一个StringBuilder的内部Char[]缓冲区的内容复制到另一个缓冲区,而不使用String作为中介。 - Dai
1
@CaiusJard:将构造的字符串从对象返回给调用者,而无需通过字符串传递...(然后调用者将对该字符串执行所需的任何操作...主要但不限于“ToString()”操作....) - NirMH
1个回答

13

其他StringBuilder实例也存在过多的Append操作

var newSB = new StringBuilder(oldSB.Length);
newSB.Append(oldSB);

1
@MitchWheat 不错的想法,个人认为如果要追加更多文本,我也会将 oldSB.Length 四舍五入到最接近的下一个2的幂。 - Dai
5
请注意,此功能仅适用于 .NET Core 2.1 及更高版本。 - Matthew Watson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接