当性能不是important 时,有几种方法可以在日常任务中连接字符串。
result = a + ":" + b
result = string.Concat(a, ":", c)
result = string.Format("{0}:{1}", a, b);
StringBuilder approach
你喜欢什么?为什么效率无关紧要,但你想保持代码最符合你的口味?
答案 0 :(得分:9)
这取决于用途。当您只想连接两个字符串时,使用a + b
比string.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。
但我想对于较大的项目,只需在样式指南中强制使用格式,以防代码可能(稍后)用于需要i18n的项目中。
答案 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");