字符串连接最佳实践

Vol*_*rix 5 c# string-concatenation string-formatting

试图确定使用string.Format代替串联字符串是否是更好的做法,如果是这样,为什么会这样?另外,我应该注意哪些是他们的优点/缺点?

这个:

string foo = "I" + " am " + " a " + " string.";
Run Code Online (Sandbox Code Playgroud)

要么:

string bar = string.Format("{0} am a {1}.", "I", "string");
Run Code Online (Sandbox Code Playgroud)

显然过于简单的例子,只是想明确.

Cor*_*urn 2

假设第一个方法在编译时没有优化,因为字符串是不可变的,它将创建许多中间字符串。它将从左到右工作,因此首先会出现“我是”,然后是“我是一个”,最后是“我是一个字符串”。它存储在 foo.

String.format 不会生成中间字符串。据我了解,它在 a 中完成所有操作,char[]然后通过将其设置为字符串使其不可变。

  • 这实际上会编译为单个 [`String.Concat(string,string,string,string)`](http://msdn.microsoft.com/en-us/library/0eafbze3(v=vs.110).aspx ) 调用,我猜这是非常智能的,因此它不会创建超出需要的字符串。如果你用一堆 `+=` 来编写它,那么是的,它会进行一堆连接并且(除非 JITter 优化它)有额外的字符串。 (3认同)