C#:最可读的字符串连接。最佳实践

时间:2010-07-18 19:28:29

标签: c# string string-concatenation

  

可能重复:
  How should I concatenate strings?

当性能不是important 时,有几种方法可以在日常任务中连接字符串。

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

你喜欢什么?为什么效率无关紧要,但你想保持代码最符合你的口味?

8 个答案:

答案 0 :(得分:9)

这取决于用途。当您只想连接两个字符串时,使用a + bstring.Format("{0}{1}", a, b)更具可读性。但是,它变得越来越复杂,我更喜欢使用string.Format。比较一下:

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

针对:

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

我认为在大多数情况下,很容易发现最易读的做事方式。在有争议哪一个更具可读性的情况下,只需选择一个,因为你的老板不支付这些毫无意义的讨论; - )

答案 1 :(得分:8)

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 :(得分:2)

String.Format(...)最慢。

对于不在循环中进行的简单连接,请使用String.Concat(...)+运算符,它们在引擎盖下转换为afaik。更具可读性是非常主观的。

使用StringBuilder进行简单连接对于简单连接也是过分的,并且很可能是过多的开销。我只会在循环中使用它。

答案 3 :(得分:2)

对于这样的事情(我猜测它正被发送到用户界面),我肯定更喜欢String.Format。它允许字符串容易国际化;你可以打电话给String.Format,并用你的翻译格式替换它们。

答案 4 :(得分:2)

我个人的偏好是:

我发现+方法最具可读性,只有使用Format()或StringBuilder才有合理的理由(i18n,性能等)。我(几乎)从不使用Concat。

我认为我发现+方法比Format()更容易阅读,因为我没有必要跳到最后才能看到{}占位符中放入了哪些变量。如果占位符不是数字顺序,则更难以阅读imo。

但我想对于较大的项目,只需在样式指南中强制使用格式,以防代码可能(稍后)用于需要i18​​n的项目中。

答案 5 :(得分:1)

  • 的String.format

    几个小组。我用的更多

  • StringBuilder方法

即使表现不重要。我必须遵守团队协议

答案 6 :(得分:1)

我更喜欢String.Format用于小字符串,而StringBuilder用于较大字符串。我的主要原因是可读性。使用String.Format(或StringBuilder.AppendFormat())对我来说更具可读性,但我不得不承认这只是个人偏好。

对于真正的大文本生成,您可能需要考虑使用新的(VS2010)T4预处理模板 - 它们非常好。

另外,如果你曾经使用VB.NET,我喜欢Kathleen Dollard在episode 152 of hanselminutes中谈到的XML文字技术。

答案 7 :(得分:1)

喜欢使用:

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");