Но, концепция строк в C# несколько иная, чем в классических языках программирования и проистекает из полностью объектной природы языка, что может ввести в заблуждение начинающих разработчиков или «пришельцев» из другого лагеря.
Главное правило, которое необходимо помнить при работе со строками – строка на протяжении ее жизни – неизменна и все методы, изменяющие строку возвращают ее копию. Также, первый символ строки имеет нулевой индекс.
Для работы с набором строк или с часто изменяющимися строками существует специальный класс – StringBuilder, который позволяет добиться значительного прироста производительности, поскольку не требует создания копии данных для манипулирования. Естественно, что сам класс должен быть предварительно создан: sb = new StringBuilder(); Функционально – string s = s + “я строка” и sb.Append(“я строка”) идентичны.
Поскольку все классы наследуются от Object — они имеют метод .ToString(), позволяющий получить строковое представление класса. Не будет ошибкой и такое «нестандартое» использование этого метода –
(2+2).ToString(); 12345.ToString();
Данный метод можно перекрыть, чтобы отображать необходимые данные –
class SomeClass {
public override string ToString() {
return "Что-то возвращаем.";
}
}
При активном использовании строк в проекте, к примеру при сборке строки из различных кусков, желательно использовать StringBuilder, так как он сильно быстрее по скорости выполнения (ведь при операциях не создаются копии исходной строки).
К примеру:
System.Diagnostics.Stopwatch sw = new Stopwatch();
string s = "";
TimeSpan ts1, ts2;
StringBuilder sb = new StringBuilder();
sw.Start();
for (int i = 0; i < 15000; i++) {
s += "test string";
}
sw.Stop();
ts1 = sw.Elapsed;
sw.Reset();
sw.Start();
for (int i = 0; i < 15000; i++) {
sb.Append("test string");
}
sw.Stop();
ts2 = sw.Elapsed;
MessageBox.Show(ts1.ToString()+"\r\n"+ts2.ToString());
// Результат
---
00:00:05.3194252 — string
00:00:00.0019723 — StringBuilder
---
Конечно, не стоит везде и всегда гнаться за миллисекундами – конкатенация двух строк, загруженных из ресурса в самом начале работы программы с помощью StringBuilder будет выглядеть по меньшей мере странно.

Пара слов о строках
