Конкатенация строк в таком простом сценарии хороша - она сложнее с чем-либо более сложным, чем даже LastName, FirstName. С форматом, который вы можете сразу увидеть, какой будет окончательная структура строки при чтении кода, с конкатенацией становится почти невозможно сразу увидеть окончательный результат (за исключением очень простого примера, подобного этому).
В долгосрочной перспективе это означает, что, когда вы вернетесь, чтобы внести изменения в формат строки, у вас будет возможность всплыть и внести некоторые изменения в строку формата, или поморщить лоб и начать перемещение по всем видам средств доступа к свойствам, смешанных с текстом, что, скорее всего, приведет к проблемам.
Если вы используете .NET 3.5, вы можете использовать метод расширения , такой как этот , и легко получить, используя синтаксис манжеты, например:
string str = "{0} {1} is my friend. {3}, {2} is my boss.".FormatWith(prop1,prop2,prop3,prop4);
Наконец, по мере того как ваше приложение усложняется, вы можете решить, что для разумного сохранения строк в вашем приложении вы хотите переместить их в файл ресурсов для локализации или просто в статический помощник. Это будет НАМНОГО легче достичь, если вы постоянно используете форматы, и ваш код может быть просто реорганизован для использования чего-то вроде
string name = String.Format(ApplicationStrings.General.InformalUserNameFormat,this.FirstName,this.LastName);