C#替换字符串中的字符串

是否可以在不指定返回值的情况下替换字符串中的子字符串?

我有一个字符串:

string test = "Hello [REPLACE] world"; 

我想用其他东西替换子串[REPLACE]

 test = test.replace("[REPLACE]", "test"); 

这工作正常但如何在不将返回值赋给变量的情况下这样做? 我想要这样的东西:

 test.replace("[REPLACE]", "test"); 

你不能,因为string是不可变的 。 它的设计使得对字符串的任何“更改”实际上都会导致创建新的string对象。 因此,如果您没有分配返回值(这是“更新的”字符串,实际上是应用了更改的原始字符串的副本),您实际上已经放弃了您想要进行的更改。

如果你想进行就地更改,理论上可以直接使用char[] (字符数组),但这很危险,应该避免。

另一种选择(如下面的Skeet先生所指出的)是使用StringBuilder及其Replace()方法。 话虽这么说,像你所展示的那样简单的替换很快,所以你可能不想打扰StringBuilder除非你经常这样做。

正如dlev所提到的,你不能用string做这个,因为字符串在.NET中是不可变的 – 一旦构造了一个字符串,你就无法做任何事情(不包括不安全的代码或reflection)来改变内容。 这使得字符串通常更容易使用,因为您不需要担心防御性复制,它们自然是线程安全的等等。

然而,它的可变表兄是StringBuilder – 它有一个Replace方法来执行一个对象替换。 例如:

 string x = "Hello [first] [second] world"; StringBuilder builder = new StringBuilder(x); builder.Replace("[first]", "1st"); builder.Replace("[second]", "2nd"); string y = builder.ToString(); // Value of y is "Hello 1st 2nd world" 

你不能。 您必须分配值,因为字符串是不可变的

http://msdn.microsoft.com/en-us/library/362314fe.aspx

你不能,字符串在.NET中是不可变的

.NET中的字符串是不可变的,它们不能在线编辑。

你可以进行内联编辑的最接近的是从一个字符串创建一个StringBuilder ,内联它的内容,然后让它再次吐出一个字符串。 但这仍然会产生一个新的字符串,而不是改变原始字符串。 但是,这是一种有用的技术,可以避免在进行大量字符串摆弄时生成大量中间字符串,例如在循环中。

你不能,在C#字符串是不可变的。 这样的事情会违反这一点。 您需要具有返回类型的字符串,因为您正在使用的字符串无法更改。

这是从html获取字符串并传递StringBuilder并从你的变量中设置值的代码。你不能做string.replace.You必须在操作时使用StringBuilder。在html页面中我添加[Name],它被Name替换为代码behind.make确保[Name]是唯一的,或者你可以给出任何唯一的名称。

  string Name = txtname.Text; string contents = File.ReadAllText(Server.MapPath("~/Admin/invoice.html")); StringBuilder builder = new StringBuilder(contents); builder.Replace("[Name]", Name); StringReader sr = new StringReader(builder.ToString());