使用字符串格式与字符串连接有什么好处?
什么是使用这个的好处:
Console.WriteLine("{0}: {1}", e.Code, e.Reason);
VS.这样的:
Console.WriteLine(e.Code + ": " + e.Reason);
????
对我来说,string.Format
挂件的好处是:
- 提高可读性
- 更好译
从性能角度看,我也从来没有做任何测量;它可能是连接速度快于挂件。
实际上,唯一的区别是第一个允许你控制布局
string.Format("*{0:3}*",1); // * 1*
或控制格式:
string.Format("*{0:c}*",1); // *$1.00*
拼接的性能可以做它的地段时,应考虑紧圈,在这种情况下,StringBuilder.Append和StringBuilder.AppendFormat都是首选。 AppendFormat和string.Format非常接近,性能明智,所以没有必要用第二个替换第一个。
布局可以通过无数的ToString重载来完成,通常接受一个模式 – 2011-01-25 22:47:36
我总是使用.Format()的原因是可读性,因此减少了错误和维护的好处。当然,如果你对代码比较陌生,这是没有意义的,因为第二个例子起初更直观。第一个看起来不必要的复杂。
但是,如果您选择第二种模式,那么当您有很多变量时就会出现问题。这是更容易理解第一种模式的好处的地方。
e.g
Console.Writeline(var1 + " " + var2 + "-" + var3 +
" some sort of additional text" + var4);
注意的错误:我需要的“文本”层出不穷的空间,但,这不是很容易在这个例子中看到的。
但是,如果我做的其他方式:
Console.Writeline("{0} {1}-{2} some sort of additional text{3}",
var1, var2, var3, var4)
很清晰的看到发生了什么事情。当您将要使用的变量分割格式时,它更容易理解最终结果。
如果我们想更长远的思考,那么它有助于全球化/定制化。如果我们将这些格式字符串放入配置中,则可以在不触及代码的情况下更改变量的格式或顺序。
由于字符串是不可变的(不能改变现有的字符串必须每次创建一个新的字符串)字符串格式可以具有性能优势,因为它不会创建尽可能多的内存引用。
result = string1 + " " + string2 + " " + string3
这将创建10个引用
- 结果
- 字符串1
- 字符串2
- STRING3
- “”
- “”
- 字符串1 + “”
- 字符串1 + “” +字符串2
- 字符串1 + “” +字符串2 + “”
- 字符串1 + “” +字符串2 + “” +串3
result = string.Format("{0} {1} {2}", string1, string2, string3)
这将创建5个引用
- 结果
- STRING1
- 字符串2
- STRING3
- “{0} {1} {2}”
它归结为 “当是它更好地使用的String.Format VS字符串连接”。
见的答案这个问题: When is it better to use String.Format vs string concatenation?
你可能想看看反汇编代码,看是否有显著的性能差异。我个人比较喜欢第一个。 – fardjad 2011-01-25 22:20:47
我不断地被那些发现格式说明符*比简单连接更可读的人感到震惊。不要告诉我,你从来没有误输过这些东西,因为它而必须回去纠正一个错误。另请参阅[本博客条目](http://geekswithblogs.net/BlackRabbitCoder/archive/2010/05/10/c-string-compares-and-concatenations.aspx)。事实证明,简单串联(`+`)最好连接(相当小的集合),当你需要在一个循环中构建时,`StringBuilder`是最好的,`Format`最适合格式化。在'+'上使用'Format'的性能好处在**上可以忽略不计**。 – 2011-01-26 11:13:14