StringBuilder和'+'运算符

Ser*_*sen 6 .net c# compiler-optimization

我在这里维护这个代码,通常有如下模式:

StringBuilder result = new StringBuilder();

result.Append("{=" + field.Name + "={");
Run Code Online (Sandbox Code Playgroud)

这样做时,看起来像是浪费了很多无用的对象构造,我想重写一下:

result.Append("{=").Append(field.Name).Append("={");
Run Code Online (Sandbox Code Playgroud)

第一个版本对GC造成的压力更大是否正确?或者是否在C#编译器中使用字符串文字进行了一些优化,其中串联字符串与字符串文字不会创建临时对象?

小智 6

我同意所有的答案,但对我来说,你需要理解C#中的字符串,并且他们实际上是在"封面"下操纵它们

当连接5个或更多字符串时,StringBuilder的使用自成一体.这是因为编译器本质上转换:

string a = b + c + d + e + f;
Run Code Online (Sandbox Code Playgroud)

r = String.Concat(new String[5] { a, b, c, d, e });
Run Code Online (Sandbox Code Playgroud)

所以数组创建有一个隐含的开销.

我建议读通过埃里克利珀以下谁在C#写的字符串连接:
http://ericlippert.com/2013/06/17/string-concatenation-behind-the-scenes-part-one/ HTTP:// ericlippert. COM/2013/06/24 /字符串拼接,幕后的部分二/