如何在 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>");
一旦我有新行,我就会收到一条消息,说我不能在常量中包含新行。
谁能建议我可以包括的另一种方式?
这里有三个问题。首先,如果你有很多文本,你不应该直接将其包含在源代码中。对于可本地化的小文本片段,您可以使用 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
- 糟糕的解决方案,但比现在更好:
var msg="请单击此链接确认您的帐户:'" + "'" + @"链接"+"'";
- 正确的方法:将字符串存储在资源文件、文本文件或任何其他文件中。
您可以在字符串中使用内联'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());