可能重复:
我应该如何连接字符串?
当性能不重要时,有几种方法可以在日常任务中连接字符串。
result = a + ":" + b
result = string.Concat(a, ":", c)
result = string.Format("{0}:{1}", a, b);
StringBuilder approach
- ... ?
你更喜欢什么,如果效率并不重要,但你想让代码最符合你的口味,为什么?
可能重复:
我应该如何连接字符串?
当性能不重要时,有几种方法可以在日常任务中连接字符串。
result = a + ":" + b
result = string.Concat(a, ":", c)
result = string.Format("{0}:{1}", a, b);
StringBuilder approach
你更喜欢什么,如果效率并不重要,但你想让代码最符合你的口味,为什么?
这取决于用途。当您只想连接两个字符串时, usinga + b
比string.Format("{0}{1}", a, b)
. 但是,它变得越来越复杂,我更喜欢使用string.Format
. 比较一下:
string x = string.Format("-{0}- ({1})", a, b);
反对:
string x = "-" + a + "- (" + b + ")";
我认为在大多数情况下,很容易发现最易读的做事方式。在有争议的情况下,哪一个更具可读性,只需选择一个,因为您的老板不会为这些毫无意义的讨论买单;-)
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";
当性能很重要时,字符串生成器。
String.Format(...)
最慢。
对于不在循环中发生的简单连接,请使用String.Concat(...)
or+
运算符,它在引擎盖下转换为相同的,afaik。更具可读性的是非常主观的。
将 aStringBuilder
用于简单的连接对于简单的连接来说也太过分了,而且很可能有太多的开销。我只会循环使用它。
对于这样的事情(我猜它正在被发送到 UI),我肯定更喜欢String.Format
. 它使字符串易于国际化;您可以 grep 调用String.Format
并用您的翻译格式替换它们。
我个人的偏好是:
我发现 + 方法最易读,并且只有在有充分理由(i18n、性能等)的情况下才使用 Format() 或 StringBuilder。我(几乎)从不使用 Concat。
我认为我发现 + 方法比 Format() 更容易阅读,因为我不必跳到最后查看 {} 占位符中放入了哪些变量。而且,如果占位符不是按数字顺序排列的,则阅读 imo 会变得更加困难。
但我想对于较大的项目,通过样式指南简单地强制使用 Format 是有意义的,以防万一代码可能在以后需要 i18n 的项目中(重新)使用。
字符串格式
对于几个连接。更多我使用
StringBuilder 方法
即使性能不重要。我必须遵守团队协议
更喜欢使用:
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");
对于小字符串,我更喜欢 String.Format,而对于大字符串,我更喜欢 StringBuilder。我的主要原因是可读性。使用 String.Format(或 StringBuilder.AppendFormat())对我来说更具可读性,但我不得不承认这只是个人喜好。
对于非常大的文本生成,您可能需要考虑使用新的 (VS2010) T4 预处理模板 - 它们非常好。
此外,如果您使用过 VB.NET,我喜欢 Kathleen Dollard 在hanselminutes 的第 152 集中谈到的 XML 文字技术。