为什么StringBuilder.AppendLine不添加带有一些字符串的新行?

我正在尝试使用stringbuilder来创建一个字符串体,用于文本(而不是HTML)电子邮件。 但是有些行(我包含动态数据,不添加新行,但在某些行中,新行按预期工作)。

在使用stringbuilder类时是否存在基本的缺失,或者是否存在一些应该发生的更基本的过程?

在以下代码中:

sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com"); sbUser.AppendLine(); sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle); sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy")); sbUser.AppendLine("=============================================================="); sbUser.AppendLine(); 

(ContentPage和thisEvent是使用Subsonic(v2)构建的自定义类.PageTitle是字符串的输出类型)

将此作为输出:

  Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com Selected event : My Event Date of event : 16 Sept 2012 ============================================================== 

正如您所看到的,代码中第3行之后的所有内容都会使所有内容都转到一行。

但是,我使用的代码更进一步:

 sbRR.AppendLine("First name : " + txtFirstname.Text.Trim()); sbRR.AppendLine("Surname : " + txtSurname.Text.Trim()); etc, 

并且所有这些都正确地出现在单独的行上。 我不明白为什么会这样。

电子邮件就是这样组成的

mailMessage.Body = sbUser.ToString() + sbRR.ToString();


添加以下代码:

 sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle + Environment.NewLine); sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy") + Environment.NewLine); 

产生以下输出:

 Selected event : My Event Date of event : 16 Sept 2012 ============================================================== 

我认为这是有效的,除了它添加了2个换行符(AppendLine和Environment.NewLine)。 看起来直接从数据库直接将数据拉入字符串构建器似乎搞乱了行结束。 即使我在数据库拉出后添加文本,它仍然保持在一行。

UPDATE

StringBuilder.Append("blah"+Environment.NewLine)产生正确的结果,但是我仍然不理解为什么这样做.AppendLine("blah"+)不起作用。

代替

 sbUser.AppendLine(); 

尝试使用

 sbUser.Append(Environment.NewLine); 

不知道为什么会这样……

我知道这个问题已经过时了,并且已被标记为已回答,但我想我会在此处添加此内容,以防其他任何人遇到此问题,因为这是Google首次针对StringBuilder.AppendLine()无法正常工作。

我遇到了同样的问题,结果certificate是Outlook问题。 Outlook通过删除额外的换行符重新格式化基于文本的电子邮件。 您可以在单个电子邮件的标题中单击“我们在此消息中删除了额外的换行符 – >恢复换行符”,或者更改执行此讨厌的小技巧的设置“选项 – >邮件 – >邮件格式 – >删除额外的行打破纯文本消息“

解决方法(因为你无法控制每个潜在的电子邮件目标上的设置)我在这里找到了新闻稿格式和删除额外的换行问题 。 基本上,如果在每行的开头添加两个空格字符,Outlook将不会重新格式化电子邮件。

这是一个帮助的扩展方法(方法名称有点冗长,所以根据自己的喜好改变:))

 namespace System.Text { public static class StringBuilderExtensions { public static void AppendLineWithTwoWhiteSpacePrefix(this StringBuilder sb, string value) { sb.AppendFormat("{0}{1}{2}", " ", value, Environment.NewLine); } public static void AppendLineWithTwoWhiteSpacePrefix(this StringBuilder sb) { sb.AppendFormat("{0}{1}", " ", Environment.NewLine); } } } 

使用Environment.NewLine

 sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com"); sbUser.AppendLine(Environment.NewLine); sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle); sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy")); sbUser.AppendLine("=============================================================="); sbUser.AppendLine(Environment.NewLine); 

在每行之后或您想要换行的地方使用Environment.NewLine

例如:-

  sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com" + Environment.NewLine); sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle); 

Windows 10 Insider预览Build 15007. Default Line Terminator和Environment.NewLine都是“\ n”。 要使用“\ r \ n”,我必须创建一个字符串常量并改为使用它。

第一个sbUser.Appendline();

第二个sbUser.Append("texto loco ");

瞧!

=)