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");

文字列は同じままで、何も置き換えられないため、上記の 2 つの方法のいずれも機能していないようです。私は何か間違ったことをしていますか?

4

3 に答える 3

106

問題は、文字列が不変であることです。メソッド replace、substring などは、文字列自体を変更しません。彼らは新しい文字列を作成し、それを置き換えます。したがって、上記のコードを正しくするには、次のようにする必要があります。

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

あるいは単に

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

別の変数が必要ない場合。

この回答は、文字列が不変であることを思い出させるものでもあります。それらに変更を加えると、実際には新しい文字列が作成されます。したがって、メモリ管理を含め、文字列に関係するすべてのことを念頭に置いてください。こちらのドキュメントに記載されているとおりです。

文字列オブジェクトは不変です。作成後に変更することはできません。文字列を変更するように見えるすべての 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 に答える