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

时间:2016-02-06 08:11:24

标签: c# asp.net

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

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>");

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

有人可以建议我可以采用另一种方式吗?

4 个答案:

答案 0 :(得分:14)

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

对于 lot 的文字,我强烈考虑创建一个嵌入到程序集中的.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本身的换行符不太可能与您的页面相关。

答案 1 :(得分:4)

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

您也可以使用Environment.NewLine

答案 2 :(得分:2)

  1. 解决方案不好,但比现在好:
  2. 
        var msg="Please confirm your account by clicking this link:\n"
        + "\n"
        + @"link"+"\n";
    
    
    1. 正确的方法:将您的字符串存储在资源文件,文本文件或任何其他文件中。

答案 3 :(得分: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());