2011-01-25 100 views
5

可能重复:
C# String output: format or concat?使用字符串格式与字符串连接有什么好处?

什么是使用这个的好处:

Console.WriteLine("{0}: {1}", e.Code, e.Reason); 

VS.这样的:

Console.WriteLine(e.Code + ": " + e.Reason); 

????

+0

你可能想看看反汇编代码,看是否有显著的性能差异。我个人比较喜欢第一个。 – fardjad 2011-01-25 22:20:47

+0

我不断地被那些发现格式说明符*比简单连接更可读的人感到震惊。不要告诉我,你从来没有误输过这些东西,因为它而必须回去纠正一个错误。另请参阅[本博客条目](http://geekswithblogs.net/BlackRabbitCoder/archive/2010/05/10/c-string-compares-and-concatenations.aspx)。事实证明,简单串联(`+`)最好连接(相当小的集合),当你需要在一个循环中构建时,`StringBuilder`是最好的,`Format`最适合格式化。在'+'上使用'Format'的性能好处在**上可以忽略不计**。 – 2011-01-26 11:13:14

回答

3

对我来说,string.Format挂件的好处是:

  • 提高可读性
  • 更好译

从性能角度看,我也从来没有做任何测量;它可能是连接速度快于挂件。

3

实际上,唯一的区别是第一个允许你控制布局

string.Format("*{0:3}*",1); // * 1* 

或控制格式:

string.Format("*{0:c}*",1); // *$1.00* 

拼接的性能可以做它的地段时,应考虑紧圈,在这种情况下,StringBuilder.AppendStringBuilder.AppendFormat都是首选。 AppendFormat和string.Format非常接近,性能明智,所以没有必要用第二个替换第一个。

+0

布局可以通过无数的ToString重载来完成,通常接受一个模式 – 2011-01-25 22:47:36

4

我总是使用.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) 

很清晰的看到发生了什么事情。当您将要使用的变量分割格式时,它更容易理解最终结果。

如果我们想更长远的思考,那么它有助于全球化/定制化。如果我们将这些格式字符串放入配置中,则可以在不触及代码的情况下更改变量的格式或顺序。

-2

由于字符串是不可变的(不能改变现有的字符串必须每次创建一个新的字符串)字符串格式可以具有性能优势,因为它不会创建尽可能多的内存引用。

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}”