将多行字符串添加到另一个字符串=丢失多行?

时间:2012-10-15 01:57:11

标签: c# asp.net string concatenation multiline

我希望创建一个字符串,其中包含每行包含一个项目的内容列表,但以下代码不维护新行:

foreach (DateTime date in dates)
{
    datelist += date.ToString("yyyy/MM/dd") + Environment.NewLine;
}

string mystring = String.Format(@"Hey there here is a list of dates

                                  Dates:

                                  {0}",
                                  datelist);

输出:

嘿,这里有一个日期列表

日期:

2012/03/04 2012/03/05 2012/03/06

期望的输出:

嘿,这里有一个日期列表

日期:

2012/03/04

2012/03/05

2012/03/06

我尝试过变体,例如两个Environment.NewLines,像\ r \ n一样转义,用@开始字符串,等等,我无法得到我想要的输出。

我最终能够通过在我想要换行的字符串中放置一个符号来解决我的问题,然后使用string.Replace将符号更改为Environment.NewLine:

foreach (DateTime date in dates)
{
    datelist += date.ToString("yyyy/MM/dd") + "<br />";
}

string mystring = String.Format(@"Hey there here is a list of dates

                                  Dates:

                                  {0}",
                                  datelist.Replace(Environment.NewLine, "<br />"));

就像我说的,这有效,但我想知道为什么在将带有行的字符串插入另一个字符串时,旧的连接不起作用,以及我的问题的标准/通用解决方案是什么。

1 个答案:

答案 0 :(得分:3)

如果您呈现HTML输出,则不应使用Environment.NewLine - 而是使用<br />。浏览器可以将多个连续的空格(包括\r\n)聚合到一个空格中。 (根据我的经验,实际行为在某种程度上取决于浏览器,但我实际上并没有对此进行研究。)

foreach (DateTime date in dates)
{
    datelist += date.ToString("yyyy/MM/dd") + "<br />";
}

string mystring = String.Format("Hey there here is a list of dates<br />" +
    "Dates:<br />{0}", datelist);

如果字符串中的某个位置需要多个空白行,请使用多个<br /> - s。