14

可能重复:
我应该如何连接字符串?

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

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

你更喜欢什么,如果效率并不重要,但你想让代码最符合你的口味,为什么?

4

8 回答 8

9

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

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

反对:

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

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

于 2010-07-18T19:52:19.613 回答
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";

当性能很重要时,字符串生成器。

于 2010-07-18T19:31:11.837 回答
2

String.Format(...)最慢。

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

将 aStringBuilder用于简单的连接对于简单的连接来说也太过分了,而且很可能有太多的开销。我只会循环使用它。

于 2010-07-18T19:39:11.720 回答
2

对于这样的事情(我猜它正在被发送到 UI),我肯定更喜欢String.Format. 它使字符串易于国际化;您可以 grep 调用String.Format并用您的翻译格式替换它们。

于 2010-07-18T19:44:31.133 回答
2

我个人的偏好是:

我发现 + 方法最易读,并且只有在有充分理由(i18n、性能等)的情况下才使用 Format() 或 StringBuilder。我(几乎)从不使用 Concat。

我认为我发现 + 方法比 Format() 更容易阅读,因为我不必跳到最后查看 {} 占位符中放入了哪些变量。而且,如果占位符不是按数字顺序排列的,则阅读 imo 会变得更加困难。

但我想对于较大的项目,通过样式指南简单地强制使用 Format 是有意义的,以防万一代码可能在以后需要 i18n 的项目中(重新)使用。

于 2010-07-18T19:50:39.873 回答
1
  • 字符串格式

    对于几个连接。更多我使用

  • StringBuilder 方法

即使性能不重要。我必须遵守团队协议

于 2010-07-18T19:41:24.170 回答
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");
于 2010-07-18T20:03:57.017 回答
1

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

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

此外,如果您使用过 VB.NET,我喜欢 Kathleen Dollard 在hanselminutes 的第 152 集中谈到的 XML 文字技术。

于 2010-07-18T19:53:09.750 回答