为啥 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() 字符串方法不修改我的字符串变量?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我无法在 python 中正确使用 str.replace() 方法 [关闭]
为啥 .replace() 不能处理从 escodege.generate() 生成的大字符串?