C#:最可读的字符串连接。 最佳实践
可能重复:
我该如何连接字符串?
当性能不重要时,有几种方法可以在日常任务中连接字符串。
result = a + ":" + b
-
result = string.Concat(a, ":", c)
-
result = string.Format("{0}:{1}", a, b);
-
StringBuilder approach
- ……?
您更喜欢什么?为什么效率无关紧要,但您想保持代码最符合您的口味?
这取决于用途。 当你只想连接两个字符串时,使用a + 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(...)
或+
运算符,它转换为引擎盖下的afai。 更具可读性是非常主观的。
对于简单的连接,使用StringBuilder
进行简单连接也是最重要的,并且很可能是过多的开销。 我只会在循环中使用它。
对于像这样的东西(我猜是被发送到UI),我肯定更喜欢String.Format
。 它允许字符串容易国际化; 你可以grep调用String.Format
并用你的翻译格式替换它们。
我个人的偏好是:
我发现+方法是最可读的,只有使用Format()或StringBuilder,如果有充分的理由(i18n,性能等)。 我(几乎)从不使用Concat。
我认为我发现+方法比Format()更容易阅读,因为我没有必要跳到最后才能看到{}占位符中放入了哪些变量。 如果占位符不是数字顺序,则更难以阅读imo。
但我想对于较大的项目,只需在样式指南中强制使用格式,以防代码可能(稍后)用于需要i18n的项目中。
-
的String.format
几个小组。 我用的更多
-
StringBuilder方法
即使表现不重要。 我必须遵守团队协议
我更喜欢String.Format用于小字符串,而StringBuilder用于较大字符串。 我的主要原因是可读性。 使用String.Format(或StringBuilder.AppendFormat())对我来说更具可读性,但我不得不承认这只是个人偏好。
对于真正的大文本生成,您可能需要考虑使用新的(VS2010)T4预处理模板 – 它们非常好用。
另外,如果你曾经使用VB.NET,我喜欢Kathleen Dollard在hanselminutes的第152集中谈到的XML文字技术。
更喜欢使用:
String.Concat
用于简单连接,如String.Concat("foo", bar);
用于复杂格式的String.Format
,如String.Format("{1}", 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");