#c# #stringbuilder
Вопрос:
Каков наилучший способ (с точки зрения производительности) создать экземпляр нового StringBuilder
из другого? (Копия-Ctor).
Я не хочу проходить через неизменяемую строку, так как нижние данные очень большие.
таким образом, приведенное ниже действительно, но не требуется.
StringBuilder newSB = new StringBuilder(oldSB.ToString());
Я хочу что-то вроде
StringBuilder newSB = new StringBuilder(oldSB);
Но это не поддерживается.
Комментарии:
1. С целью чего?
2. Проблема в том, что строки неизменны по своей природе. Кажется, что вы хотите как бы «разделить» подстроку между двумя строками, и она довольно большая, но на самом деле, если эти два строителя строк должны создавать две разные строки (даже если одна является подмножеством другой), я боюсь, что невозможно выполнить то, что вы хотите сделать.
3. Я думаю, что OP хочет скопировать содержимое внутренних
Char[]
буферов одного StringBuilder в другой, не используя aString
в качестве посредника.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 или более поздней версии.