Для простых конкатенаций строк используйте подход +
. Это понятнее для простых вещей, которые не требуют формата.
Для более сложных строк, которые имеют определенный формат и в которых полезно сохранить структуру всей строки и обеспечить заполнитель для ввода, используйте String.Format
.
И да, есть накладные расходы. String.Format
использует StringBuilder под крышками. В этих сценариях простые конкатенации строк будут выполняться намного быстрее. Несколько тестов и сообщений в блоге на эту тему можно найти довольно легко. Конечно все зависит от вашего использования. Если в цикле встречаются небольшие строковые конкататы, то повторное использование String.Format
, вероятно, будет более заметным, чем прямое +
конкат. Если вы строите большую строку в цикле, тогда классическим примером является предпочтение StringBuilder
, и связанные вопросы по concat и StringBuilder можно найти в SO.
РЕДАКТИРОВАТЬ: Для пояснения, это служит небольшой цели: String.Format("{0}{1}", a, b)
, так как форматирование не так много. Это просто a + b
. К сожалению, я встречал такие примеры в рабочем коде, и как только я увижу String.Format, я ожидаю увидеть что-то, что должно быть структурировано определенным образом, а не простой конкат.
OTOH, рассмотрите этот номер телефона: "(" + area + ") " + number + " x" + extension
- слишком много всего происходит, и изменить его нелегко. В этом случае предпочтительным является String.Format: String.Format("({0}) {1} x{2}", area, number, extension)
. Это все еще тривиальный пример, но вы поняли идею.