StringBuilder в C#

StringBuilder в C#: зачем нужен, как им пользоваться и когда обычный string лучше.

StringBuilder — изменяемый буфер символов из пространства имён System.Text. Он позволяет собирать строку кусками без создания промежуточных объектов, что особенно важно в циклах.

Проблема с + в цикле

Каждый + создаёт новую строку. При 10 000 итерациях это 10 000 ненужных объектов в памяти:

// Медленно при большом N:
string result = "";
for (int i = 0; i < 5; i++)
    result += i + " ";
Console.WriteLine(result);

Вывод:

0 1 2 3 4 

StringBuilder — правильный способ

using System.Text;

var sb = new StringBuilder();
for (int i = 0; i < 5; i++)
    sb.Append(i).Append(' ');

Console.WriteLine(sb.ToString());

Вывод:

0 1 2 3 4 

StringBuilder меняет внутренний буфер на месте — никаких промежуточных строк.

Основные методы

Метод

Что делает

Append(value)

добавить в конец

AppendLine(value)

добавить строку + перевод строки

Insert(index, value)

вставить в позицию

Remove(start, len)

удалить символы

Replace(old, new)

заменить подстроку

ToString()

получить готовую строку

Length

текущая длина содержимого

using System.Text;

var sb = new StringBuilder("Привет");
sb.Append(", мир");
sb.Insert(0, ">> ");
sb.Replace("мир", "C#");
Console.WriteLine(sb.ToString());
Console.WriteLine($"Длина: {sb.Length}");

Вывод:

>> Привет, C#
Длина: 12

Когда что выбрать

Ситуация

Выбор

Несколько склеиваний вне цикла

string + интерполяция

Сборка строки в цикле (10+ итераций)

StringBuilder

Форматированный вывод

$"..." или string.Format

Коротко

  • StringBuilder хранит символы в изменяемом буфере — не создаёт лишних объектов при каждой операции.
  • Подключается через using System.Text.
  • Основные методы: Append, AppendLine, Insert, Remove, Replace, ToString.
  • Используйте StringBuilder всегда, когда собираете строку в цикле.
Проверьте себя
1. Зачем использовать StringBuilder вместо конкатенации + в цикле?
AStringBuilder работает медленнее, но код чище
BStringBuilder не создаёт промежуточных строк — эффективнее по памяти
C+ работает только с int
DStringBuilder доступен только в .NET 6+
2. Из какого пространства имён импортируется StringBuilder?
ASystem.Collections
BSystem.Text
CSystem.IO
DSystem.Linq
3. Как получить обычную строку из StringBuilder sb?
Asb.Value
Bsb.ToString()
Csb.Build()
D(string)sb
Поддержать проект