web-dev-qa-db-fra.com

Le remplacement de chaîne C # ne remplace pas réellement la valeur de la chaîne

J'essaie de remplacer une partie de chaîne par une autre autre chaîne. Pour être plus précis, j'ai C:\Users\Desktop\Project\bin\Debug

et j'essaie de remplacer \bin\Debug par \Resources\People

J'ai essayé ce qui suit:

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

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

Aucun des deux ci-dessus ne semble fonctionner, car la chaîne reste la même et rien n'est remplacé. Est-ce que je fais quelque chose de mal?

28
John Demetriou

Le problème est que les chaînes sont immuables. Les méthodes remplacent, la sous-chaîne, etc. ne change pas la chaîne elle-même. Ils créent une nouvelle chaîne et la remplacent. Donc, pour que le code ci-dessus soit correct, il devrait être

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

Ou juste

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

si une autre variable n'est pas nécessaire

Cette réponse rappelle également que les chaînes sont immuables. Toute modification que vous leur apporterez créera en fait une nouvelle chaîne. Gardez donc cela à l'esprit avec tout ce qui implique des chaînes, y compris la gestion de la mémoire. Comme indiqué dans la documentation ici

Les objets chaîne sont immuables: ils ne peuvent pas être modifiés après avoir été créés. Toutes les méthodes String et opérateurs C # qui semblent modifier une chaîne retournent en fait les résultats dans un nouvel objet chaîne

70
John Demetriou

La méthode path.Replace Renvoie en fait un string. Vous devez procéder comme suit:

path = path.Replace("firstString", "secondString");
12
PaulG
String.Replace(string,string) returns string. 

Donc, enregistrez le nouveau chemin dans une variable de chaîne.

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