1

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

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 />"));

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

4

1 回答 1

3

如果你渲染 HTML 输出,你不应该使用Environment.NewLine-<br />来代替。浏览器可以将多个连续的空格(包括\rand \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。

于 2012-10-15T02:02:49.450 回答