С#: наиболее читаемая конкатенация строк. передовая практика

Возможный дубликат:
Как объединить строки?

Существует несколько способов concat строк в повседневных задачах, когда производительность не важна.

  • result = a + ":" + b
  • result = string.Concat(a, ":", c)
  • result = string.Format("{0}:{1}", a, b);
  • StringBuilder approach
  • ...?

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

Ответы

Ответ 1

string.Format для меня, но на практике я использую то, что подходит для цели, с учетом производительности и удобочитаемости.

Если бы это были две переменные, которые я использовал бы.

string.Concat(str1, str2);

Если в нем содержится константа или что-то, что требует форматирования.

string.Format("{0} + {1} = {2}", x, y, x + y);

Или для чего-то вроде SQL-запроса

string SqlQuery = "SELECT col1, col2, col3, col4" + 
                  "FROM table t " + 
                  "WHERE col1 = 1";

И построитель строк, когда имеет значение производительность.

Ответ 2

Это зависит от использования. Когда вы просто хотите конкатрировать две строки, использование a + b является гораздо более читаемым, чем string.Format("{0}{1}", a, b). Однако он становится более сложным, я предпочитаю использовать string.Format. Сравните это:

string x = string.Format("-{0}- ({1})", a, b);

против

string x = "-" + a + "- (" + b + ")";

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

Ответ 3

String.Format(...) является самым медленным.

Для простых конкатенаций, которые не выполняются в цикле, используйте оператор String.Concat(...) или +, который переводится в ту же область под капотом afaik. То, что более читаемо, очень субъективно.

Использование StringBuilder для простых конкатенаций также сверхпростой для простых конкатенаций и, скорее всего, слишком много накладных расходов. Я использовал бы его только в цикле.

Ответ 4

Что-то вроде этого (которое, как я предполагаю, отправляется в пользовательский интерфейс), я бы предпочел String.Format. Это позволяет легко интернационализировать строку; вы можете grep для вызовов String.Format и заменить их на ваш переводный формат.

Ответ 5

Мои личные предпочтения:

Я нахожу подход + к наиболее читабельному и использую только Format() или StringBuilder, если для этого есть веская причина (i18n, производительность и т.д.). Я (почти) никогда не использую Concat.

Я считаю, что подход "+" легче читать, чем Format(), просто потому, что мне не нужно переходить к концу, чтобы увидеть, какие переменные помещаются в {} place-holder. И если держатели мест не имеют числового порядка, становится еще труднее читать imo.

Но я предполагаю, что для более крупных проектов имеет смысл просто принудительно применять формат "Формат" с помощью руководства по стилю, только если код может быть (повторно) использован в проекте, требующем позже i18n.

Ответ 6

  • string.Format

    для нескольких конкат. для более я использую

  • Подход StringBuilder

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

Ответ 7

Я предпочитаю String.Format для маленьких строк и StringBuilder для более крупных. Моя основная причина - читаемость. Мне гораздо удобнее использовать String.Format(или StringBuilder.AppendFormat()), но я должен признать, что это только личное предпочтение.

Для действительно большого генерации текста вам может потребоваться использовать новый (VS2010) T4 Preprocessed Templates - они действительно приятные.

Кроме того, если вы когда-либо находитесь в VB.NET, мне нравится XML-литературная техника, о которой Кэтлин Доллард говорила в эпизоде ​​152 hanselminutes.

Ответ 8

Предпочитает использовать:

String.Concat для простых конкатенаций типа String.Concat("foo", bar);

String.Format для сложного форматирования, например String.Format("<a href=\"{0}\">{1}</a>", url, text);

StringBuilder для массивных конкатенаций типа:

var sb = new StringBuilder();
sb.AppendLine("function fooBar() {");
sp.AppendLine(String.Join(Environment.NewLine, blah));
sp.AppendLine("}");
page.RegisterClientScript(page.GetType(), sb.ToString());

Предпочитают избегать "foo" + "bar" (а также if (foo == "bar"). И особенно String.Format("{0}{1}", foo, bar) и

throw new Exception("This code was" +
    "written by developer with" +
    "13\" monitor");