Каков наилучший способ копирования StringBuilder?

#c# #stringbuilder

Вопрос:

Каков наилучший способ (с точки зрения производительности) создать экземпляр нового StringBuilder из другого? (Копия-Ctor).

Я не хочу проходить через неизменяемую строку, так как нижние данные очень большие.

таким образом, приведенное ниже действительно, но не требуется.

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

Я хочу что-то вроде

 StringBuilder newSB = new StringBuilder(oldSB);
 

Но это не поддерживается.

Комментарии:

1. С целью чего?

2. Проблема в том, что строки неизменны по своей природе. Кажется, что вы хотите как бы «разделить» подстроку между двумя строками, и она довольно большая, но на самом деле, если эти два строителя строк должны создавать две разные строки (даже если одна является подмножеством другой), я боюсь, что невозможно выполнить то, что вы хотите сделать.

3. Я думаю, что OP хочет скопировать содержимое внутренних Char[] буферов одного StringBuilder в другой, не используя a String в качестве посредника.

4. @CaiusJard: возвращает построенную строку из объекта вызывающему объекту без передачи через строку… (затем вызывающий абонент сделает со строкой все, что потребуется… в основном, но не ограничиваясь операцией «toString ()»….)

Ответ №1:

Существует перегрузка Append для других StringBuilder экземпляров:

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

Комментарии:

1. @MitchWheat Хорошая идея, и лично я бы также округлил до oldSB.Length следующей ближайшей степени 2, если к ней будет добавлено больше текста.

2. Обратите внимание, что это доступно только для .net Core 2.1 или более поздней версии.