查看string
类元数据,我只看到运算符==
并!=
重载.那么它如何能够为' +
'运算符执行连接?
编辑:
Eric Lippert关于字符串连接的一些有趣的注释:
Joel还提到了第2部分中提到的超级文章(http://www.joelonsoftware.com/articles/fog0000000319.html)
Jon*_*eet 143
它没有 - C#编译器做:)
所以这段代码:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
Run Code Online (Sandbox Code Playgroud)
实际上编译为:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
Run Code Online (Sandbox Code Playgroud)
(Gah - 介入编辑意外删除了其他部分.)
C#编译器注意到,有多个字符串连接这里的好处是,你最终不会创建一个中间字符串x + y
,然后需要再次复制为串接的部分(x + y)
和z
.相反,我们一次完成所有这一切.
编辑:请注意,如果在循环中连接,编译器将无法执行任何操作.例如,这段代码:
string x = "";
foreach (string y in strings)
{
x += y;
}
Run Code Online (Sandbox Code Playgroud)
最终相当于:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
Run Code Online (Sandbox Code Playgroud)
...所以这确实会产生大量的垃圾,这就是为什么你应该使用一个StringBuilder
这样的情况.我有一篇文章详细介绍了两者,希望能回答更多问题.
归档时间: |
|
查看次数: |
145480 次 |
最近记录: |