C# 字符串连接:+;=运算符与已联接的字符串数组

C# 字符串连接:+;=运算符与已联接的字符串数组,c#,string-concatenation,C#,String Concatenation,在许多语言中,使用+=运算符的串联将创建一个新的字符串实例。建议使用我们在末尾加入的字符串[] 在Javascript中: var myString = new Array("Hello"); myString.push(" "); myString.push("world !"); console.log(myString.join('')); 更有效的方法是: var myString = "Hello"; myString += " "; myString += "world !"; c

在许多语言中,使用
+=
运算符的串联将创建一个新的字符串实例。建议使用我们在末尾加入的
字符串[]

在Javascript中:

var myString = new Array("Hello");
myString.push(" ");
myString.push("world !");
console.log(myString.join(''));
更有效的方法是:

var myString = "Hello";
myString += " ";
myString += "world !";
console.log(myString);
在C#中,
+=
运算符是否创建新字符串? StringBuilder是否比在C#中使用
string[]
更有效?

,+=运算符是否创建新字符串?

String
在C#和Java中是不可变的。这意味着您不能修改它。每个修改字符串的方法(
+=
也执行一个方法)都返回一个
字符串的新实例

与在
字符串[]
上使用
.Join()
相比,
StringBuilder
是否更有效?

StringBuilder
比使用
更具性能(每次调用都需要一些纳秒)。在
string[]
上加入
。
因此,当您在循环或其他过程中经常这样做时,它确实“有意义”。

在C#中,+=运算符是否创建了新字符串?

String
在C#和Java中是不可变的。这意味着您不能修改它。每个修改字符串的方法(
+=
也执行一个方法)都返回一个
字符串的新实例

与在
字符串[]
上使用
.Join()
相比,
StringBuilder
是否更有效?

StringBuilder
比使用
更具性能(每次调用都需要一些纳秒)。在
string[]
上加入

因此,当你经常在一个循环或其他地方这样做时,这确实是有意义的。

这类问题最好用现实世界的例子和基准来回答,而不是纯粹的理论检验。你能提供一些你想看到的基准测试的例子吗?请注意,
a+=b
a=a+b
被C编译器翻译成
a=string.Concat(a,b)
,它们有两个不同的用途
StringBuilder
用于直接连接任意数量的字符串,无论是否在集合中-
string。Join
用于使用分隔符连接(来自集合的)字符串。如果您想使用
Join
将字符串与空分隔符连接起来,没有什么可以阻止您,但这不是预期的目的。这类问题最好通过实际示例和基准测试来回答,而不是纯粹的理论检查。你能提供一些你想看到的基准测试的例子吗?请注意,
a+=b
a=a+b
被C编译器翻译成
a=string.Concat(a,b)
,它们有两个不同的用途
StringBuilder
用于直接连接任意数量的字符串,无论是否在集合中-
string。Join
用于使用分隔符连接(来自集合的)字符串。如果您想使用
Join
将字符串与空分隔符连接起来,没有什么可以阻止您,但这不是预期的目的。第二个问题是使用
StringBuilder
与在字符串数组上调用
Join
。感谢您的解释。编辑我的答案“StringBuilder比使用.Join on a string[]性能更好(每次调用的性能都是一些纳秒)”你怎么知道的?@stuartd问题是连接多个string[]。不使用string.Join。至少我认为第二个问题是使用
StringBuilder
而不是在字符串数组上调用
Join
。谢谢你的解释。编辑我的答案“StringBuilder比使用.Join on a string[]性能更好(每次调用的性能都是一些纳秒)”你怎么知道的?@stuartd问题是连接多个string[]。不使用string.Join。至少我这么认为