使用“+”运算符的string连接

看看string类的元数据,我只看到运算符==!=重载。 那么它怎么能够为“ + ”运算符执行连接呢?

编辑

Eric Lippert关于string连接的一些有趣的注释:

第1部分

第2部分

还有一篇来自Joel的超级文章,在第2部分中提到( http://www.joelonsoftware.com/articles/fog0000000319.html )

它不 – C#编译器:)

所以这个代码:

 string x = "hello"; string y = "there"; string z = "chaps"; string all = x + y + z; 

实际上被编译为:

 string x = "hello"; string y = "there"; string z = "chaps"; string all = string.Concat(x, y, z); 

(Gah – 介入编辑意外地删除了其他位)

C#编译器注意到在这里有多个string连接的好处是,你不会最终创build一个x + y的中间string,然后需要作为(x + y)z 。 相反,我们把这一切都做完了。

编辑:请注意,编译器不能做任何事情,如果你在一个循环连接。 例如,这个代码:

 string x = ""; foreach (string y in strings) { x += y; } 

只是最终相当于:

 string x = ""; foreach (string y in strings) { x = string.Concat(x, y); } 

…所以这产生很多垃圾,这就是为什么你应该使用StringBuilder来处理这种情况。 我有一篇关于这两个更详细的文章 ,希望能够回答更多的问题。