关于c#:String使用’+’运算符连接

String Concatenation using '+' operator

查看string类元数据,我只看到操作符==!=过载。那么,它如何能够为"EDOCX1"(3)运算符执行连接呢?

编辑:

Eric Lippert关于字符串连接的一些有趣注释:

第1部分

第2部分

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


它没有-C编译器有:)

所以这个代码:

1
2
3
4
string x ="hello";
string y ="there";
string z ="chaps";
string all = x + y + z;

实际编译为:

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

(gah-中间编辑意外删除了其他位。)

C编译器注意到这里有多个字符串连接的好处是,您不会最终创建一个x + y的中间字符串,然后需要将其作为(x + y)z连接的一部分再次复制。相反,我们一次就完成了。

编辑:请注意,如果在循环中连接,编译器就不能做任何事情。例如,此代码:

1
2
3
4
5
string x ="";
foreach (string y in strings)
{
    x += y;
}

结果相当于:

1
2
3
4
5
string x ="";
foreach (string y in strings)
{
    x = string.Concat(x, y);
}

…所以这确实会产生大量的垃圾,这就是为什么您应该对这种情况使用StringBuilder。我有一篇文章将详细介绍这两个问题,希望能回答更多的问题。