Есть ли способ добавить два строковых построек? И если да - работает ли он лучше, чем добавление строки в StringBuilder?
Как добавить два stringBuilders?
Ответ 1
Просто так....
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
sb.Append(sb1.ToString());
Ответ 2
Я знаю, что это три года спустя, но .NET 4 StringBuilder
ведет себя по-другому.
Тем не менее, он все еще возвращается к тому, "что вы хотите сделать?" Вы ищете просто самый эффективный способ добавления двух StringBuilders
и продолжения только с последним результатом? Или вы ожидаете продолжить работу с существующим буферизованным значением добавленного StringBuilder
?
Для первого и всегда в .NET 4,
frontStringBuilder.Append(backStringBuilder);
лучше.
Для последнего сценария в .NET 2/3.5,
frontStringBuilder.Append(backStringBuilder.ToString(0, backStringBuilder.Length));
является лучшим (и не повредит производительность в .NET 4).
Ответ 3
Это будет сделано без выделения
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]);
}
Ответ 4
Вам не нужно вызывать .ToString(). Вы должны просто добавить один к другому. Все это. Это будет лучше против прямого вызова .ToString() для следующей причины:
1) StringBuilder не имеет конструктора с StringBuilder в качестве параметра, строки, int/string и т.д. StringBuilder переопределяет .ToString() и в результате:
StringBuilder sb1 = new StringBuilder("1");
sb1.Append(new StringBuilder("2"));
Console.WriteLine(sb1);
этот код автоматически вызовет переопределенную версию .ToString(). Выход будет "12";
2) Если StringBuilder будет добавлен как входящий параметр в конструктор StringBuilder в следующих версиях каркаса, ваш код будет ясным и готов для правильного добавления без каких-либо рефакторинга.
Хорошего дня!
Ответ 5
Просто как это:
firstStringBuilder.Append(secondStringBuilder.ToString());
Ответ 6
Если 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);
}
}
Ответ 7
Вы можете сделать это,
bool flag = false;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("The value of the flag is ").Append(flag).Append(".");
Источник MSDN.