2010-12-02 2 views
2

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

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

Обратите внимание, что нет смысла явно вызывать `writer.Dispose()` в конце инструкции `use`, которая будет утилизировать его уже. – 2010-12-02 09:28:39

ответ

11

Изменить

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

в

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

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

7
string1 = string1.Replace(...); 

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

2

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

так

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

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

0

Обратитесь к этому MSDN Documentation

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

Смежные вопросы