String.Format или нет?

Дубликат от: Вывод строки: формат или concat в C#?

Особенно в мире C# использование String.Format для всего действительно распространено, обычно как разработчик VB.NET, если мне не нужно * Я не использую String.Format,

Я предпочитаю обычную конкатенацию строк, например:

V1 = V2 & "test-x" & V3 & "-;"

для меня это лучше, чем это:

V1 = String.Format("{0} test-x {1} -;", V2, V3)

Я что-то пропустил? Или это просто личное предпочтение?

Причины использования String.Format (из ответов) (Я постараюсь поддерживать это в актуальном состоянии)

  • Локализация намного проще, если вы используете строковый формат
  • Очевидно, проще изменить формат ввода
  • Более читабельно (однако это личное)
  • Лучшая производительность

** Иногда мне нужно изменить стиль или динамически заменять материал, тогда я использую String.Format *

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
2 569
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Лично я считаю, что String.Format легче читать, строка представлена ​​как один последовательный текст. Хотя это зависит от того, сколько параметров есть, если вам нужно искать правильный параметр, чтобы понять его, тогда ...

Хорошая статья Карла Сегина: код лучше - используйте string.format, объясняющая некоторые преимущества.

так что в основном это просто выглядит лучше :) или читабельным, что сводится к личным предпочтениям, не так ли?

dr. evil 08.12.2008 17:22

Первый метод очень труден для чтения и еще более утомителен для набора текста. Кроме того, как только вы начнете выполнять множество таких конкатенаций, нужно подумать о соображениях производительности.

Я думал, что они точно такие же, есть ли какие-то реальные проблемы с производительностью?

dr. evil 08.12.2008 17:18

Ага. Поскольку строки неизменяемы в .NET, каждая конкатенация создает новую строку, которая должна быть собрана сборщиком мусора. string.Format использует совершенно другой подход (больше похожий на StringBuilder).

TToni 08.12.2008 17:24

хорошие вещи, узнал что-то новое сегодня.

dr. evil 08.12.2008 17:25

@TToni: Нет, компилятор вызывает String.Concat с соответствующими строками. Это не похоже на то, что a + b + c + d включает 3 этапа конкатенации.

Jon Skeet 08.12.2008 17:26

Если вы на самом деле форматируете значения ({0: d} и т. д.), String.Format намного лучше читать, чем конкатенацию строк.

Для меня это зависит от содержания. Объединение строк действительно создает дополнительные строковые объекты (потому что строки неизменяемы в .NET), хотя в основном это проблема читаемости.

Иногда возникает сложность, когда вы хотите поместить символы новой строки в строку, и в этом случае я обычно использую что-то вроде:

StringBuilder.AppendLine(string.Format("Some text {0}.", "here"));

Плохой пример - используйте вместо этого AppendFormat, а затем AppendLine без аргументов.

Jon Skeet 08.12.2008 17:23

Знаете, вы хорошо замечаете - мне никогда не удавалось выбрать «лучший» способ использования методов StringBuilder.AppendLine / AppendFormat. Мне действительно нужен метод AppendLineFormat. :) Вы имеете в виду это: body.AppendFormat ("Ths {0}", "sfdsf"). AppendLine ();

Neil Barnwell 08.12.2008 17:26

@Neil: Ага, хотя я бы тоже обычно делал это отдельным заявлением, если только я не делаю много этого.

Jon Skeet 08.12.2008 17:38
Ответ принят как подходящий

Если вы когда-нибудь собираетесь локализовать свое приложение (а это часто бывает трудно исключить с самого начала), то предпочтительнее использовать String.Format по двум причинам:

  1. У вас есть только один строковый литерал для перевода
  2. Вы можете изменить порядок значений, что может иметь больше смысла на другом языке.

это хорошая причина использовать String.Format, спасибо, что указали на это.

dr. evil 08.12.2008 17:24

«Вы можете изменить порядок значений» - как это поможет вам на другом языке?

Tomalak 08.12.2008 17:25

Первое, что приходит мне в голову: адреса, которые отформатированы по-разному по всему миру (например, сначала zip, затем город - или наоборот) ...

Matthias Meid 08.12.2008 17:28

«Вы можете изменить порядок значений»> На самом деле это чертовски важно, потому что у языков есть разные грамматики, и иногда вам нужно перевернуть предложение, имеющее смысл на другом языке. Одно из препятствий, с которыми я столкнулся в приложении ASP много лет назад.

dr. evil 08.12.2008 17:29

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

Все писали о том, насколько удобочитаема string.format (что я принимаю, и у нее есть null ref и преимущества интернационализации, да), но никто не упомянул, что значительно медленнее, чем простая конкатенация строк (небольшое количество элементов) или использование StringBuilder (большое количество конкатс).

Если производительность имеет значение или вы выполняете большое количество операций (поэтому производительность скоро будет иметь значение воля), вам следует избегать форматирования.

Обновлено: ссылки по запросу;)

http://msmvps.com/blogs/jon_skeet/archive/2008/10/06/formatting-strings.aspx

http://blog.briandicroce.com/2008/02/04/stringbuilder-vs-string-performance-in-net/

Не стесняйтесь ссылаться на msmvps.com/blogs/jon_skeet/archive/2008/10/06/… в своем ответе :)

Jon Skeet 08.12.2008 17:25

Ха! Именно эта статья заставила меня протестировать ее сам пару месяцев назад. Имена легко забываются, но содержание запоминается.

annakata 08.12.2008 17:31

Другие вопросы по теме