string.Concat
просто объединяет строки вместе.Он не обеспечивает преобразований, кроме вызова ToString
, без форматирования и т. Д.
string.Format
гораздо богаче, позволяет использовать шаблоны форматирования и т. Д.
При использовании оператора +
в источнике C #код, компилятор преобразует это в вызовы String.Concat
- это не оператор времени выполнения, как, скажем, decimal
.
Так вот:
string result = x + y + z;
скомпилировано в это:
string result = string.Concat(x, y, z);
С точки зрения эффективности, ясные вызовы string.Concat
и использование +
могут быть эквивалентны.Обычно я ожидаю, что он будет быстрее, чем string.Format
, но в большинстве случаев разница будет незначительной .Сначала вы должны написать наиболее понятный и наиболее обслуживаемый код (который часто означает использование string.Format
), а затем микрооптимизацию только тогда, когда у вас есть тестовые данные, чтобы показать, что вам нужно для оптимизации этого конкретного фрагмента, изатем сохраняйте оптимизацию только после того, как доказали, что она помогает.
Обратите внимание, что одна область, в которой небольшая часть оптимизации может иметь огромное значение, - это повторное объединение, обычнов петле.Этот код ужасно неэффективен:
string result = "";
foreach (var x in y)
{
// Do some processing...
string z = ...;
result += z;
}
Это приводит к необходимости копировать промежуточную строку на каждой итерации.В этих ситуациях либо используйте StringBuilder
, либо используйте запрос LINQ для представления элементов, которые вам в конечном итоге понадобятся для объединения, а затем либо string.Join
или string.Concat
для выполнения объединения.