Я выбираю на основе читабельности.
Я предпочитаю вариант форматирования, когда вокруг переменных есть текст. В этом примере:
Console.WriteLine("User {0} accessed {1} on {2}.",
user.Name, fileName, timestamp);
вы понимаете значение даже без имен переменных, тогда как конкат загроможден кавычками и знаками + и смущает мои глаза:
Console.WriteLine("User " + user.Name + " accessed " + fileName +
" on " + timestamp + ".");
(я позаимствовал пример Майка, потому что он мне нравится)
Если строка формата не имеет большого значения без имен переменных, я должен использовать concat:
Console.WriteLine("{0} {1}", p.FirstName, p.LastName);
Параметр форматирования позволяет мне прочитать имена переменных и сопоставить их с соответствующими числами. Для параметра concat этого не требуется. Меня все еще смущают кавычки и знаки +, но альтернатива еще хуже. Рубин
Console.WriteLine(p.FirstName + " " + p.LastName);
С точки зрения производительности, я ожидаю, что параметр форматирования будет медленнее, чем concat, поскольку для формата требуется, чтобы строка была проанализирована . Я не помню, чтобы мне приходилось оптимизировать такие инструкции, но если бы я это сделал, я бы посмотрел на string
методы, такие как Concat()
и Join()
.
Другое преимущество формата заключается в том, что строку формата можно поместить в файл конфигурации. Очень удобно с сообщениями об ошибках и текстом пользовательского интерфейса.