【发布时间】:2012-06-24 17:29:53
【问题描述】:
我正在尝试使用 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 似乎会弄乱行尾。即使我在数据库拉取后添加文本,它仍然保持在一行。
更新
在做
StringBuilder.Append("blah"+Environment.NewLine)
产生了正确的结果,但是我仍然不明白为什么它会起作用并且.AppendLine("blah"+<database content>) 不起作用。
【问题讨论】:
-
在 sbUser.ToString() 调用之后你对字符串做了什么吗?
-
PageTitle 是否有可能返回可能中断文本流的奇怪值?或者被调用的代码会暂时改变文化或换行设置?换句话说,如果你硬编码“我的事件”,问题是否仍然存在? 编辑猜你的编辑答案证实了怀疑;)
-
您可以尝试使用默认容量创建 StringBuilder 吗?例如:
StringBuilder sb = new StringBuilder(1024); -
@Me.Name 返回数据的数据库的排序规则为
SQL_Latin1_General_CP1_CI_AS,列数据类型为nvarchar(150)不确定为什么这会改变文化(英文),尽管数据库服务器的语言是english (US) -
@Steve - 这会有什么不同?
标签: c# .net newline stringbuilder