ASP.net c#替换字符串不起作用

// Build email link confirmLink = Master.siteDomain + "/newsLetter.aspx?action=confirm&e=" + emailAddress + "&code=" + verCode; using (SqlCommand cmd = new SqlCommand("SELECT newRegEmailBody, newRegEmailSubj FROM tblSiteSettings WHERE (isActive = 1)", Master.cn)) { SqlDataReader rdr = cmd.ExecuteReader(); if (rdr.Read()) { emailBody = rdr[0].ToString(); emailSubj = rdr[1].ToString(); } rdr.Close(); } emailBody.Replace("[CONFIRMATION_LINK]", confirmLink); emailer.sendEmail(emailAddress, Master.noReplyEmail, emailSubj, emailBody); 

这一切似乎都很好,除了身体仍然出现在文本中的[CONFIRMATION_LINK] ,任何想法?

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

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

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

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

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

使用以下代码将第2行更改为最后一行:

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

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

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