Каковы плюсы / минусы (если таковые имеются) для использования
string output;
int i = 10;
output = string.Format("the int is {0}", i);
против
string output;
int i = 10;
output = "the int is " + i;
Я всегда использовал последний пример, но кажется, что большинство онлайн-уроков используют пример string.format. Я не думаю, что есть какие-то реальные различия с точки зрения эффективности, моя первоначальная мысль такова, что программисту не нужно постоянно ломать строку, чтобы вставить переменные.
Ответы:
Если вы считаете, что перевод важен в вашем проекте, первый синтаксис действительно поможет в этом.
Например, вы можете иметь:
Также обратите внимание, что ваши переменные могут не всегда находиться в одном и том же месте в предложении с этим синтаксисом:
источник
System.out.println($"{name} is {age} year's old.");
Проверьте первый ответ для /programming/4671610/why-use-string-format . Это охватывает все, на мой взгляд, почему это лучше.
Кроме того, каждая сборка .NET имеет внутренний пул, содержащий коллекцию уникальных строк. Когда ваш код скомпилирован, все строковые литералы, на которые вы ссылаетесь в своем коде, добавляются в этот пул. Если у вас есть код, который выглядит так:
Это делает его 2 струнами в бассейне.
Если у тебя есть:
"the int is {0} and the double is {1}"
У вас есть только одна строка в бассейне.
Немного сложнее узнать, когда строки интернированы, а когда нет, потому что компилятор обладает некоторым интеллектом при обнаружении строк, которые, возможно, не требуют интернирования иногда ... Посмотрите, например, эту статью, которая дает более полное представление об этом дело.
Редактировать: после того, как я немного покопался , я столкнулся с интересным ответом на вопрос: когда лучше использовать String.Format против конкатенации строк? , Короче говоря, автор ответа с +30 голосами приводит убедительный аргумент в пользу объединения строк, когда локализация не задействована.
источник
Я предпочитаю первый способ, потому что он позволяет мне точно видеть, как будет выглядеть строка при выводе. Очень просто забыть добавить пробел или добавить дополнительный интервал при добавлении строк.
Я уверен, что в первом случае есть и выигрыш в производительности, так как нет необходимости создавать дополнительные строки; но это не моя главная задача.
источник
Используя первую опцию, вы можете сохранить обычно используемую строку формата и сократить объем ввода, необходимый для упрощения обновления строки везде, где она используется. По сути, первый вариант позволяет легко реализовать DRY. Это также намного более приятный синтаксис, если в строке нужно использовать несколько переменных, как вы упомянули.
источник
Я думаю с
string.Format()
этим легче увидеть, каким именно будет результат (так что у вас нет проблем с забытыми пробелами или чем-то в этом роде), а также легче набирать и изменять.Если вы хотите сделать очень простое форматирование, использование
+
оператора плюс может быть проще, но я склонен использовать его только при объединении двух строк, не более.Чтобы показать, как
string.Format()
проще изменить, представьте, что вы хотите добавить точку в конце предложения в своем примере: переход отstring.Format("The int is {0}", i)
доstring.Format("The int is {0}.", i)
- это всего лишь один символ. Но переход от"the int is " + i
к"the int is " + i + '.'
намного больше.Еще одним преимуществом
string.Format()
является то, что он позволяет легко указать формат для использования, напримерstring.Format("The int is 0x{0:X}.", i)
. Это еще важнее при форматировании даты.Что касается эффективности, то
string.Format()
, скорее всего, она медленнее простых конкатенаций строк. Но код, подобный этому, скорее всего, не на горячем пути, так что это не имеет значения. И если это произойдет, вы, вероятно, лучше использоватьStringBuilder
.источник
Используйте тот, который делает ваш код наиболее читабельным. Не беспокойтесь о производительности.
Для вашего примера ниже я предпочитаю B, потому что это просто более читабельно. Но языковые переводы выше также имеют смысл. Не позволяйте никому заставить вас в использовании string.Format, вместо того, чтобы читать и пункт Джефф Atwoods отличным блоге на The Sad Трагедии Micro оптимизаций театра
A:
против
B:
источник
Ссылка: строка вывода: формат или конкат в C #?
Рассмотрим этот код.
Это слегка измененная версия вашего кода.
Вот мои результаты:
источник