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

7 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>");
Run Code Online (Sandbox Code Playgroud)

这有效,但我想做更高级的事情,我看到很多模板.但是,所有模板都至少有100行,每行后都有换行符.这是我尝试添加一个新行时的示例.

await UserManager.SendEmailAsync(2, "Confirm your account", 
            "Please confirm your account by clicking this link: 

            <a href=\"www.cnn.com\">link</a>");
Run Code Online (Sandbox Code Playgroud)

一旦我有一个新的行,然后我收到一条消息,说我不能在常量中包含一个新行.

任何人都可以提出另一种方法,我可以包括这样做吗?

Jon*_*eet 14

这里有三个问题.首先,如果你有很多文本,你不应该直接在源代码中包含它.对于可本地化的小文本,您可以使用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>");
Run Code Online (Sandbox Code Playgroud)

(这\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>");
Run Code Online (Sandbox Code Playgroud)

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

但这只会让你在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>");
Run Code Online (Sandbox Code Playgroud)

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


Kon*_*ran 5

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

你也可以用 Environment.NewLine