C# string replace does not actually replace the value in the string [duplicate]

I am trying to replace a part of string with another another string. To be more precise I have C:\Users\Desktop\Project\bin\Debug

and I am trying to replace \bin\Debug with \Resources\People

I have tried the following:

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

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

None of the above two seems to work, as the string remains the same and nothing is replaced. Am I doing something wrong?


The problem is that strings are immutable. The methods replace, substring, etc. do not change the string itself. They create a new string and replace it. So for the above code to be correct, it should be

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

Or just

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

if another variable is not needed.

This answer is also a reminder that strings are immutable. Any change you make to them will in fact create a new string. So keep that in mind with everything that involves strings, including memory management. As stated in the documentation here.

String objects are immutable: they cannot be changed after they have been created. All of the String methods and C# operators that appear to modify a string actually return the results in a new string object


The path.Replace method actually returns a string. You should do the following:

path = path.Replace("firstString", "secondString");

String.Replace(string,string) returns string. 

So, save the new path in some string variable.

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