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。至少我这么认为