Строки типа string представляют собой неизменяемые объекты: после того, как строка инициализирована, изменить её уже нельзя. Рассмотрим для примера следующий код:
string s = "Hello, ";
s += "world!";
Здесь компилятор создаёт в памяти строковый объект и инициализирует его строкой «Hello, », а затем создаёт другой строковый объект и инициализирует его значением первого объекта и новой строкой «world!», а затем заменяет значение переменной s на новый объект. В результате строка s содержит именно то, что хотел программист, однако в памяти остаётся и изначальный объект со строкой «Hello, ». Конечно, со временем сборщик мусора уничтожит этот бесхозный объект, однако если в программе идёт интенсивная работа со строками, то таких бесхозных объектов может оказаться очень много. Как правило, это негативно сказывается на производительности программы и объеме потребляемой ею памяти.
Чтобы компилятор не создавал каждый раз новый строковый объект, разработчики языка C# ввели другой строковый класс: StringBuilder. Приведённый выше пример с использованием этого класса будет выглядеть следующим образом:
StringBuilder s = new StringBuilder("Hello, ");
s.Append("world!");
Конечно, визуально этот код выглядит более сложным, зато при активном использовании строк в программе он будет гораздо эффективнее. Помимо добавления строки к существующему объекту (Append) класс StringBuilder имеет ещё ряд полезных методов:
Escape-последовательность
Действие
Insert
Вставляет указанный текст в нужную позицию исходной строки
Remove
Удаляет часть строки
Replace
Заменяет указанный текст в строке на другой
Если нужно преобразовать объект StringBuilder в обычную строку, то для этого можно использовать метод ToString():