Когда я должен использовать String.Format или String.Concat вместо оператора конкатенации? - PullRequest
9 голосов
/ 12 января 2011

В C # можно объединять строки несколькими различными способами:

Используя оператор конкатенации:

var newString = "The answer is '" + value + "'.";

Используя String.Format:

var newString = String.Format("The answer is '{0}'.", value);

Использование String.Concat:

var newString = String.Concat("The answer is '", value, "'.");

Каковы преимущества / недостатки каждого из этих методов?Когда мне следует отдавать предпочтение одному из других?

Вопрос возникает из-за споров между разработчиками.Один никогда не использует String.Format для конкатенации - он утверждает, что это для форматирования строк, а не для конкатенации, и это всегда нечитаемо, поскольку элементы в строке выражены в неправильном порядке.Другой часто использует String.Format для конкатенации, потому что считает, что это облегчает чтение кода, особенно там, где задействованы несколько наборов кавычек.Оба эти разработчика также используют оператор конкатенации и String.Builder.

Ответы [ 7 ]

17 голосов
/ 12 января 2011

Что касается скорости, то почти всегда не имеет значения .

var answer = "Use what makes " + "the code most easy " + "to read";
3 голосов
/ 12 января 2011

Любопытно, но String.Format внутренне использует StringBuilder.AppendFormat (). Например, код String.Format выглядит следующим образом:

public static string Format(IFormatProvider provider, string format, params object[] args)
{
  if (format == null || args == null)
   throw new ArgumentNullException((format == null ? "format" : "args"));

  StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
  builder.AppendFormat(provider, format, args);
  return builder.ToString();
}

Подробнее об этом вы можете узнать здесь . Итак, почему мы не упомянули здесь о StringBuilder.AppendFormat ()!

По основному вопросу:

Ключ в том, чтобы выбрать лучший инструмент для работы. Что я имею в виду? Посмотрите на эти удивительные слова мудрости:

* Concatenate (+) is best at concatenating. 
* StringBuilder is best when you need to building.
* Format is best at formatting.
3 голосов
/ 12 января 2011

Я обычно обращаюсь к читабельности и склоняюсь к использованию Формат . Большая часть кода написана один раз и прочитана несколько раз, поэтому для меня важно, чтобы читатель мог быстро понять сказанное.

3 голосов
/ 12 января 2011

Я обычно использую string.Format, когда объединяю в цепочку более 2 или 3 значений, так как это упрощает просмотр конечного результата. Конкатенация строк выполняется медленно, так как вам нужно создавать новый строковый объект для каждой операции.

Если вам нужно объединить более 5 строк, используйте StringBuilder, так как это будет намного быстрее.

3 голосов
/ 12 января 2011

Производительность часто является движущей силой этого решения.См. эту статью Айенде.

0 голосов
/ 27 апреля 2012

Это статья об использовании памяти для различных методов конкатенации и оптимизации компилятора, используемых для генерации IL. Методы объединения и проблема оптимизации

0 голосов
/ 12 января 2011

Не рекомендуется хранить строку в коде, поэтому, если вы решите извлечь строки из кода, тогда с помощью String.Format это будет проще сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...