查看string
个类元数据,我只看到操作符==
和!=
重载.那么,它如何能够对"+
"运算符执行串联呢?
Edit:
埃里克·利伯特(Eric Lippert)关于字符串连接的一些有趣的笔记:
第二部分(http://www.joelonsoftware.com/articles/fog0000000319.html)中还提到了乔尔的一篇超级文章
查看string
个类元数据,我只看到操作符==
和!=
重载.那么,它如何能够对"+
"运算符执行串联呢?
Edit:
埃里克·利伯特(Eric Lippert)关于字符串连接的一些有趣的笔记:
第二部分(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#编译器注意到这里有多个字符串串联的好处是,您不会最终创建一个x + y
的中间字符串,然后需要再次复制它作为(x + y)
和z
串联的一部分.相反,我们一次就完成了这一切.
编辑:请注意,如果您在循环中连接,编译器can't会执行任何操作.例如,此代码:
string x = "";
foreach (string y in strings)
{
x += y;
}
结果相当于:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
...所以这个does会产生很多垃圾,这就是为什么你应该在这种情况下使用StringBuilder
.我有article going into more details about the two分,希望能回答更多的问题.