В чем разница между String.Concat, string.format и +? - PullRequest
6 голосов
/ 15 февраля 2012

Какая разница между:

  • String.Concat * * 1005
  • String.Format
  • + оператор.

какой из них более эффективен при любых условиях, будь то длинная или короткая конкатенация строк.

1 Ответ

14 голосов
/ 15 февраля 2012

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 для выполнения объединения.

...