为啥 Replace() 字符串方法不修改我的字符串变量?

Posted

技术标签:

【中文标题】为啥 Replace() 字符串方法不修改我的字符串变量?【英文标题】:Why does the Replace() string method not modify my string variable?为什么 Replace() 字符串方法不修改我的字符串变量? 【发布时间】:2010-10-04 10:45:09 【问题描述】:
emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);

// now that the emailBody variable is set, send the email
emailer.sendEmail(emailAddress, Master.noReplyEmail, emailSubj, emailBody);

emailBody 是一个非空字符串变量,其中包含我要发送的电子邮件的正文,包括短语“[CONFIRMATION_LINK]”。我想用 confirmLink 变量(一些 URL)的内容替换那个短语。

当我发送电子邮件时,我仍然在电子邮件正文中看到短语“[CONFIRMATION_LINK]”。为什么?

【问题讨论】:

【参考方案1】:

字符串是不可变的。字符串操作一般会返回新的字符串实例。 试试这个:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);

【讨论】:

【参考方案2】:

Replace 方法返回一个新的、更新的字符串。您需要将Replace 回调的结果分配给emailBody

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);

【讨论】:

【参考方案3】:

C# 中的字符串是不可变的,这意味着一旦实例化它们就不能更改,除非明确指向另一个字符串。发生的情况是您在没有任何变量的情况下调用“替换”来接收返回的字符串。

使用此代码将第二行更改为最后一行:

emailBody = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);

【讨论】:

【参考方案4】:

这是因为 Replace 不编辑 emailBody 变量。它返回结果字符串。在这种情况下,您需要:

string bodyToSend = emailBody.Replace("[CONFIRMATION_LINK]", confirmLink);
emailer.sendEmail(emailAddress, Master.noReplyEmail, emailSubj, bodyToSend);

【讨论】:

以上是关于为啥 Replace() 字符串方法不修改我的字符串变量?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 str.replace 这么快?

为啥我无法在 python 中正确使用 str.replace() 方法 [关闭]

为啥 .replace() 不能处理从 escodege.generate() 生成的大字符串?

为啥在使用 regexp_replace 时每个字符前后都有空格?

SQL 修改字符串中指定字符

python中修改字符串的值