C#string replace实际上并不替换字符串中的值

Joh*_*iou 30 .net c# string

我试图用另一个字符串替换字符串的一部分.更确切地说,我有 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");

以上两者似乎都不起作用,因为字符串保持不变并且没有任何替换.难道我做错了什么?

Joh*_*iou 74

问题是字符串是不可变的.替换方法,子串等不会改变字符串本身.他们创建一个新的字符串并替换它.所以对于上面的代码来说应该是正确的

path1 = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");
Run Code Online (Sandbox Code Playgroud)

要不就

path = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt");
Run Code Online (Sandbox Code Playgroud)

如果不需要另一个变量

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

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

  • 或者只是`path = path.Replace("\\ bin \\ Debug","\\ Resource \\ People \\ VisitingFaculty.txt");`如果不需要另一个变量. (5认同)
  • 对问题和答案进行了投票,因为这解决了我遇到的问题.我不认为根据这个问题进行投票是否合理,搜索"string.replace C#not working"将我带到了这里. (2认同)
  • 谢谢,直到我看到这个,我才明白为什么 Replace 不起作用。我忘了将它分配给同一个变量。 (2认同)

Pau*_*ulG 12

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

path = path.Replace("firstString", "secondString");
Run Code Online (Sandbox Code Playgroud)

  • @macrian并不意味着其他人无法回答.如果其他人可以提供他们认为比您更好的答案,他们有权提供额外的答案.这是SO的目的的一部分; 每个人都有能力回答和投票结果的最佳答案(无论作者)倾向于浮动到顶部. (5认同)

SKJ*_*SKJ 8

String.Replace(string,string) returns string. 
Run Code Online (Sandbox Code Playgroud)

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

path = path.Replace("\\bin\\Debug", "\\Resource\\People\\VisitingFaculty.txt"); 
Run Code Online (Sandbox Code Playgroud)