39

我正在尝试用另一个字符串替换字符串的一部分。更准确地说,我有 C:\Users\Desktop\Project\bin\Debug

我正在尝试\bin\Debug 替换\Resources\People

我尝试了以下方法:

  1. path.Replace(@"\bin\Debug", @"\Resource\People\VisitingFaculty.txt");

  2. path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");

上述两个似乎都不起作用,因为字符串保持不变并且没有任何内容被替换。难道我做错了什么?

4

3 回答 3

106

问题是字符串是不可变的。replace、substring 等方法不会更改字符串本身。他们创建一个新字符串并替换它。所以为了上面的代码是正确的,它应该是

path1 = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");

要不就

path = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");

如果不需要另一个变量。

这个答案也提醒我们字符串是不可变的。您对它们所做的任何更改实际上都会创建一个新字符串。因此,请记住所有涉及字符串的内容,包括内存管理。如文档here中所述。

字符串对象是不可变的:它们在创建后无法更改。所有看似修改字符串的 String 方法和 C# 运算符实际上都在一个新的字符串对象中返回结果

于 2012-11-07T20:29:36.183 回答
14

path.Replace方法实际上返回一个string. 您应该执行以下操作:

path = path.Replace("firstString", "secondString");
于 2012-11-07T20:32:49.677 回答
8
String.Replace(string,string) returns string. 

因此,将新路径保存在某个字符串变量中。

path = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt"); 
于 2012-11-07T21:07:25.407 回答