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

C#替换字符串中的字符串,c#,string,replace,C#,String,Replace,是否可以在不指定返回值的情况下替换字符串中的子字符串 我有一个字符串: string test = "Hello [REPLACE] world"; 我想用其他内容替换子字符串[replace]: test = test.replace("[REPLACE]", "test"); 这很好,但是如果不将返回值赋给变量,我怎么做呢 我想要这样的东西: test.replace("[REPLACE]", "t

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

我有一个字符串:

string test = "Hello [REPLACE] world";
我想用其他内容替换子字符串
[replace]

test = test.replace("[REPLACE]", "test");
这很好,但是如果不将返回值赋给变量,我怎么做呢

我想要这样的东西:

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

您不能,因为字符串是不可变的。它的设计使得对字符串的任何“更改”实际上都会导致创建一个新的
string
对象。因此,如果不指定返回值(即“更新的”字符串,实际上是原始字符串的副本以及应用的更改),则实际上放弃了要进行的更改

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


另一种选择(如下面Skeet先生所指出的)是使用
StringBuilder
及其
Replace()
方法。也就是说,像您展示的那样的简单替换相当快,因此您可能不想麻烦使用
StringBuilder
,除非您经常这样做。

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


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

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

最接近在线编辑的方法是从字符串创建
StringBuilder
。在线摆弄它的内容,然后让它再次吐出一根线

但是这仍然会产生一个新的字符串,而不是改变原来的字符串。不过,这是一种很有用的技术,可以避免在进行大量字符串处理(例如在循环中)时生成大量中间字符串。

您不能,因为在C#中,字符串是不可变的。像这样的事情会违反这一点


您需要字符串的返回类型,因为您正在使用的字符串不能更改。

正如dlev所提到的,您不能使用
字符串执行此操作,因为字符串在.NET中是不可变的-一旦构造了字符串,您就无法更改内容(不安全的代码或反射除外)。这使得字符串通常更容易使用,因为您不需要担心防御性复制,它们自然是线程安全的

然而,它的可变近亲是-它有一个执行对象内替换的方法。例如:

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"

下面是从HTML内容中获取字符串并将其传递给StringBuilder并从变量中设置值的代码。无法执行string.replace操作。操作时必须使用StringBuilder。在这里的HTML页面中,我添加了[Name],它被代码隐藏中的Name替换。确保[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());

非常感谢jon:)你再次成为我的助手,非常好。你是对的,但是请为那些不知道什么是不可变的人添加一些额外的信息,比如代码或任何链接。你可能应该为初学者提供一些关于不可变的信息。