使用“+”运算符的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
来处理这种情况。 我有一篇关于这两个更详细的文章 ,希望能够回答更多的问题。