我有这样的字符串:
var abc = "text1 text2 text3";
我想在字符串中将“text3”更改为“textabc”。有没有办法可以在不创建新字符串的情况下完成此操作?
答案 0 :(得分:3)
字符串在C#中是不可变的,因此任何操作本身都会创建一个新的字符串...
由于这个事实,字符串是不可变的 - 内容 字符串对象无法更改 但是,在创建对象之后 语法使它看起来像你 可以做到这一点。
StringBuilders通常是对“字符串”执行操作的最有效方式。特别是如果你一次连接一个字符串。
请参阅StringBuilder.Replace()方法 - 这不需要您将结果重新分配给另一个StringBuilder,因为它实际上更改了StringBuilder本身。
看看this article非常着名的Jon Skeet(你会认识他:))所有关于合理使用StringBuilder的事。
答案 1 :(得分:1)
string newString = abc.Replace("text3", "textabc");
字符串在CLR中是不可变的:你永远不能改变它们。
答案 2 :(得分:1)
主要问题是写“不创建新字符串”是什么意思。
如上所述,字符串在.NET中是不可变的,也就是说,一旦创建它们,它们就无法改变。
但是,您可以使用新的字符串实例替换它们:
var abc = "text1 text2 text3";
abc = abc.Replace("text3", "textabc");
如果您想要更多灵活性,可能需要使用StringBuilder
,您可以根据需要删除和替换字符串,最后使用其ToString
方法将结果作为字符串实例。
答案 3 :(得分:1)
不,因为字符串是不可变的,但您可以将新字符串重新分配给同一个变量
var abc = "text1 text2 text3"
abc = abc.Replace("text3", "textabc");