![]() |
1
3
在您提出的情况下,实际上最好对string类使用连接运算符。这是因为它可以预先计算字符串的长度并分配一次缓冲区,然后将内存快速复制到新的字符串缓冲区中。 这是连接字符串的一般规则。当您有一组要连接在一起的项(如2或2000等)时,最好使用连接运算符将它们全部连接起来,如下所示:
在您针对s1的具体案例中应注意:
编译器发现它可以优化此处字符串文本的连接,并将上述内容转换为:
注意,这仅用于将两个字符串文字连接在一起。所以如果你要这么做:
然后它不做什么特别的事情(但它仍然调用concat并预计算长度)。但是,在这种情况下:
编译器会将其转换为:
如果要连接的字符串的数目是可变的(例如,一个事先不知道其中有多少元素的循环),那么stringbuilder是连接这些字符串的最有效的方法,因为您将始终需要重新计算缓冲区以考虑新的正在添加的字符串项(其中您不知道还剩多少个)。 |
![]() |
2
2
编译器可以在编译时连接文本,因此“foo”+“bar”可以直接编译为“foobar”,而无需在运行时执行任何操作。 除此之外,我怀疑有什么显著的区别。 |
![]() |
3
1
你的“知识”不正确。你应该
有时
使用A
在这种情况下,代码编译为:
使用A
我有一个 article 更详细地说。 |
![]() |
4
1
s2和s3之间没有区别。编译器将为您处理s1,并在编译期间连接它。 |
![]() |
5
-1
我认为这应该决定编译器。因为所有的字符串构建都可以优化,因为值是已知的。
|
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |