它不是-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)and
串联的一部分再次复制
z。相反,我们一次性完成了所有工作。
编辑:请注意,如果您在循环中串联,编译器 将无法 执行任何操作。例如,此代码:
string x = "";foreach (string y in strings){ x += y;}最终等同于:
string x = "";foreach (string y in strings){ x = string.Concat(x, y);}…因此 确实会
产生大量垃圾,这就是为什么
StringBuilder在这种情况下应使用a的原因。我有一篇文章将详细介绍这两者,希望能回答更多问题。



