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

时间:2012-06-22 12:04:29

标签: c# .net newline stringbuilder

我正在尝试使用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)。似乎直接从数据库直接将数据拉入一个字符串构建器似乎搞乱了行结束。即使我在数据库拉动后添加文本,它仍然保持在一行。

更新

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

6 个答案:

答案 0 :(得分:29)

我知道问题已经过时并且已经标记为已回答,但我想我会在此处添加此内容,以防其他人遇到此问题,因为它是Google首次针对StringBuilder.AppendLine进行了点击( )不工作。

我遇到了同样的问题,结果证明是Outlook问题。 Outlook通过删除额外的换行符重新格式化基于文本的电子邮件。您可以点击&#34;我们在此邮件中删除了额外的换行符 - &gt;恢复换行符&#34;在单个电子邮件的标题中,或更改执行此令人讨厌的小技巧的设置&#34;选项 - &gt;邮件 - &gt;邮件格式 - &gt;删除纯文本邮件中的额外换行符&#34;

我在Newsletter Formatting And The Remove Extra Line Breaks Issue找到了解决方法(因为您无法控制每个潜在电子邮件目标的设置)。 基本上,如果您在每行的开头添加两个空格字符,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);
        }
    }
}

答案 1 :(得分:25)

而不是

sbUser.AppendLine();

尝试使用

sbUser.Append(Environment.NewLine);

不知道为什么会这样......

答案 2 :(得分:6)

使用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);

答案 3 :(得分:0)

在每行之后或您想要新行

的地方使用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); 

答案 4 :(得分:0)

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

答案 5 :(得分:-3)

首先 sbUser.Appendline();

sbUser.Append("texto loco ");

瞧!

=)