如何在 C# 中的常量中包含换行符

本文关键字:常量 包含 换行符 | 更新日期: 2023-09-27 18:33:24

我有代码在注册时向用户发送电子邮件:

await UserManager.SendEmailAsync(2, "Confirm your account", 
                "Please confirm your account by clicking this link: <a href='"www.cnn.com'">link</a>");

这有效,但我想做一些更高级的事情,我已经看到了很多模板。但是,所有模板至少有 100 行长,并且每行后都有换行符。以下是我尝试只添加一个新行的示例。

await UserManager.SendEmailAsync(2, "Confirm your account", 
            "Please confirm your account by clicking this link: 
            <a href='"www.cnn.com'">link</a>");
一旦我有新行,我

就会收到一条消息,说我不能在常量中包含新行。

谁能建议我可以包括的另一种方式?

如何在 C# 中的常量中包含换行符

这里有三个问题。首先,如果你有很多文本,你不应该直接将其包含在源代码中。对于可本地化的小文本片段,您可以使用 resx/resources 文件 - Visual Studio 将为您提供一个网格,以便您可以为特定资源名称等指定文本。

但是,对于大量文本,我强烈建议创建一个嵌入到程序集中的.txt文件,并Assembly.GetManifestResourceStream阅读。编辑文本文件比管理大型字符串文本块要容易得多

但是,答案的其余部分解决了您实际提出的有关字符串文字的问题。

其次是在字符串中获取换行符,这可以通过使用转义序列直接包含它来完成:

await UserManager.SendEmailAsync(2, "Confirm your account", 
    "Please confirm your account by clicking this link:'r'n<a href='"www.cnn.com'">link</a>");

(此处'r'n是回车符和换行符。有时您可能只想'r或只是'n。这取决于上下文。

或逐字字符串文字:

await UserManager.SendEmailAsync(2, "Confirm your account", 
    @"Please confirm your account by clicking this link:
      <a href=""www.cnn.com"">link</a>");

请注意,在逐字字符串文本中,您需要通过加倍来转义双引号,因为反斜杠只是反斜杠。

但这只会在HTML中给你一个换行符。如果您尝试在显示的文本中获取换行符,则应使用 HTML。例如,您可以使用

await UserManager.SendEmailAsync(2, "Confirm your account", 
    "Please confirm your account by clicking this link:<br /><a href='"www.cnn.com'">link</a>");

。但我收集<br>标签大多不受欢迎 - 您应该查看控制 HTML 布局的其他方法。请记住,HTML 本身中的换行符不太可能与您的页面相关。

使用 'n .这是新行的转义序列。

您也可以使用Environment.NewLine

  1. 糟糕的解决方案,但比现在更好:
   var msg="请单击此链接确认您的帐户:'"    + "'"    + @"链接"+"'";
  1. 正确的方法:将字符串存储在资源文件、文本文件或任何其他文件中。

您可以在字符串中使用内联'n来指示新行:

await UserManager.SendEmailAsync(2, "Confirm your account", 
            "Please confirm your account by clicking this link:'n'n<a href='"www.cnn.com'">link</a>");

或者,如果您有一大段文本要发送,可能会更好,您可以使用StringBuilder来构建文本行,然后将其写入您的方法。

var builder = new StringBuilder();
builder.AppendLine("Please confirm your account by clicking this link:");
builder.AppendLine("<a href='"www.cnn.com'">link</a>")
await UserManager.SendEmailAsync(2, "Confirm your account", builder.ToString());