Я думаю, что эффективность - это не проблема только с 10 строками, но, может быть, вы не хотите полагаться на то, что только десять.
Конкатенация строк создает новый объект String в памяти, поскольку объекты String являются неизменяемыми. Это также предполагает, что другие операции String могут создавать новые экземпляры, такие как replace. Обычно этого можно избежать с помощью StringBuilder.
StringBuilder избегает этого, используя буфер, с которым он работает; когда значение StringBuilder объединяется с другой строкой, содержимое добавляется в конец буфера.
Однако есть предостережения, см. этот абзац :
Особенности производительности
[...]
Производительность конкатенации
операция для строки или
Объект StringBuilder зависит от того, как
часто происходит выделение памяти.
Операция конкатенации строк всегда
выделяет память, тогда как
Операция конкатенации StringBuilder
только выделяет память, если
Буфер объекта StringBuilder слишком
маленький для размещения новых данных.
Следовательно, класс String
предпочтительнее для объединения
операция, если фиксированное число строк
объекты объединены. В этом
случай, индивидуальная конкатенация
операции могут быть даже объединены в
одна операция компилятора.
Объект StringBuilder предпочтительнее для
операция конкатенации, если
произвольное количество строк
сцеплены; например, если цикл
объединяет случайное число
строки пользовательского ввода.
Так что (надуманный) случай, подобный этому, вероятно, не следует заменять на StringBuilder:
string addressLine0 = Person.Street.Name + " " + Person.Street.Number + " Floor " + Person.Street.Floor;
... так как компилятор может уменьшить это до более эффективной формы. Кроме того, весьма спорно, если бы достаточно неэффективные материй в большей схеме вещей.
Следуя рекомендациям Microsoft, вы, вероятно, хотите вместо этого использовать StringBuilder (как показывают другие весьма адекватные ответы).