string.Replace не ведет себя как ожидалось - PullRequest
2 голосов
/ 11 мая 2009

Может кто-нибудь объяснить, почему я получаю разные результаты из этих двух утверждений? Я думал, что переназначение значения той же переменной приведет к значению, которое я получу в приведенном выше примере. Что мне здесь не хватает?

_body.Replace("##" + _variableName + "##",
    templateVariables[_variableName])

Здравствуйте, pitty ## LastName ##,

_body = _body.Replace("##" + _variableName.ToUpper() + "##", 
    templateVariables[_variableName])

Привет ## FirstName ## ## LastName ##,

Ответы [ 3 ]

7 голосов
/ 11 мая 2009

Строки являются неизменяемыми, поэтому функция Replace не изменяет строку, для которой она вызывается. Вам нужно назначить его снова, как вы делали во втором примере.

И, как отмечали другие люди, вызов ToUpper гарантирует, что имена переменных не совпадают.

2 голосов
/ 11 мая 2009

Если я правильно понимаю: Ваш первый оператор не присваивает возвращаемое значение, так как replace возвращает новый экземпляр замещаемой строки.

_body = _body.Replace("##" + _variableName + "##",
    templateVariables[_variableName]);

должен исправить тебя там.

Во втором случае у вас есть переменная, получающая замену, измененная ToUpper (), и фактическая строка, содержащая смешанные значения в регистре.

Ваша строка должна быть

Hello ##FIRSTNAME## ##LASTNAME##, 
2 голосов
/ 11 мая 2009

Вы получили звонок на .ToUpper() во втором примере. Это то, что вызывает поведение, которое вы видите?

...