23 января 2013 г.

Почему метод String.Replace ничего не заменяет (C#)?

Программист из меня так себе. В свое время самостоятельно освоил C++ - но где-то на полпути бросил.

Знаний хватало, чтобы писать программы для себя, пробовать писать программы для продажи по Shareware-лицензии (была такая в свое время). Даже удалось написать программу, которая до сих пор пользуется популярностью (!) и бродит по просторам интернета (а дело было много лет назад).

Потом все бросил. Последнее время иногда что-то нужно написать под собственные нужды. По привычке выбираю C++. Но я уже давно знаком с C# и "со словарем" (IntelliSense + MSDN) могу что-то наваять. Но я не знаток языка.

А тут сегодня не мог понять. Использую стандартный метод для строки "заменить" (String.Replace), а он ничего не заменяет. Как строка была, так и осталась. Что за ..?


Оказывается строка в C# имеет особый статус (это объект) и обычно неизменяема.

Сначала я делал так:

string newString = oldString.Replace("bad word", "good word");

Проверяю newString - а там старая строка без замен.

Оказывается правильно будет написать так (как прочитал в инете: "это типичная ошибка"):

oldString = oldString.Replace("bad word", "good word");
string newString = oldString;

Вот так все работает. Только непривычно как-то.

Не буду вдаваться в подробности, почему так. Я и сам не сильно это понимаю (хотя ясно, что строка ведет себя как объект, а не как простая переменная.)

5 комментариев: