String.Replace не заменяет строку во время выполнения - PullRequest
2 голосов
/ 02 декабря 2010

Следующая строка в приведенном ниже коде не оказывает никакого влияния:

string1.Replace(string1.Substring(firstchar, lastchar - firstchar), "##");

string1 остается неизменным, и я получаю тот же индекс, возвращаемый при использовании IndexOf.

while (firstchar != string1.LastIndexOf("test"))
{

    firstchar = string1.IndexOf("test");
    lastchar = string1.IndexOf(" ");
    using (StreamWriter writer = new StreamWriter("C:\\textfile1.txt"))
    {
        writer.WriteLine(string1.Substring(firstchar, lastchar - firstchar));
        writer.WriteLine();
        writer.Dispose();
    }
    string1.Replace(string1.Substring(firstchar, lastchar - firstchar), "##");

}

Ответы [ 4 ]

11 голосов
/ 02 декабря 2010

Изменение

string1.Replace(string1.Substring(firstchar, lastchar - firstchar), "##");

до

string1 = string1.Replace(string1.Substring(firstchar, lastchar - firstchar), "##");

string.Replace не изменяет исходную строку, но возвращает измененную строку в качестве возвращаемого значения.

7 голосов
/ 02 декабря 2010
string1 = string1.Replace(...);

Из документов: String.Replace возвращает новую строку, в которой все вхождения указанной строки в текущем экземпляре заменены другой указанной строкой.

2 голосов
/ 02 декабря 2010

Строки являются неизменяемыми, поэтому если вы изменяете строковый объект, создается новый объект, поэтому вам необходимо иметь ссылку на вновь созданную строку.

, поэтому

string1 = string1.Replace(string1.Substring(firstchar, lastchar - firstchar), "##"); 

будетрешить вопрос

0 голосов
/ 02 декабря 2010

См. Эту Документацию MSDN

Как и другие говорили, вам нужно использовать возвращаемое значение из операции replace.

...