Код, который вы дали должен работать нормально:
String u = f + s + q + w + o;
Обратите внимание, что это будет преобразовано компилятором в:
String u = String.Concat(new String[] { f, s, q, w, o });
EDIT: Все остальные ответы до сих пор полагают, что StringBuilder
является правильный путь сюда. Это не. StringBuilder
велика, чтобы избежать проблем, как это:
// Bad code - don't use
string result = "";
foreach (string value in collection) {
result += value;
}
В этом случае было бы более крупные временные строки, созданные из-за конкатенация выполняется на каждой итерации цикла. Промежуточное значение равно только, необходимое для следующей итерации цикла.
Сейчас, в этом случае, мы знаем всего Результат из конкатенации за один раз: f + s + q + w + o
. Компилятор преобразует это в один вызов String.Concat
, поэтому никаких временных строк не требуется. Кроме того, метод String.Concat
может построить строку результата с точно правильной внутренней длиной хранилища, поскольку он знает все содержимое для начала. В StringBuilder
есть начальная емкость, которая затем увеличивается при перераспределении, где это необходимо. Это означает, что обычно либо. В результате строка имеет более крупный резервный магазин, чем требуется, или есть заключительный этап «копирования» для преобразования в строку нужного размера. (Какой курс действий берется конкретной реализации;. Я считаю, что ранние версии рамок, используемых, чтобы сделать первый, и более поздние версии сделать последний)
Я думаю, вы ответили на свой вопрос. –