2012-10-15 119 views
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这样的转义,sta用@处理字符串,等等,我无法得到我想要的输出。

我最终能够通过把一个符号到,我想换行字符串来解决我的问题,然后用与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 />")); 

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

+0

您输出到HTML页面吗? – Neverever

+0

'Environment.NewLine'是一个换行符。如果你输出到一个HTML页面(我可以在这个问题中看到你标记为asp.net),这显然不起作用,因为页面不知道如何处理换行符。但那是_is_为什么你的'
'工作。 –

回答

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,当然。

+0

Ahhh我提出了使用String.Replace的想法,但是我的意见混淆在了我的脑海里---我认为我正在用Environment.NewLine替换
,但实际上它将用
替换Environment.NewLine ,我在想,“为什么Environment.NewLine在这里工作,但不在原始字符串中?” ---现在我只是感到尴尬:/甚至根本不需要使用Replace,因为我在每个串联的末尾放置
。 – CptSupermrkt

+0

@CptSupermrkt Lol,不要感到尴尬,这是每个人都会发生的愚蠢的监督。 :) – xxbbcc