如何在字符串文字中插入换行符?

Cap*_*mic 147 .net c# line-breaks

在.NET中,我可以提供两者\r\n字符串文字,但有一种方法可以插入像"new line"这样的特殊字符,比如Environment.NewLine静态属性?

Jon*_*eet 305

嗯,简单的选择是:

您也可以在任何地方使用\n,并替换:

string x = "first line\nsecond line\nthird line".Replace("\n",
                                                         Environment.NewLine);
Run Code Online (Sandbox Code Playgroud)

请注意,您不能将此字符串设为常量,因为该值Environment.NewLine仅在执行时可用.

  • @abatishchev:在*某些*地方,这是一个很好的做法.在我的其他人,它不是.您确实需要知道要使用特定于平台的平台.例如,如果您使用的是应该定义行终止符的网络协议,那么*不是一个好主意. (18认同)
  • @Captain:你为什么要避免使用`Environment.NewLine`?恰恰相反,使用它是一种很好的做法 (2认同)
  • 亲爱的主人,这个C#6版本的字符串插值看起来像PHP/Perl ...... (2认同)

Tal*_*ome 32

如果你想要一个包含Environment.NewLine的const字符串,你可以这样做:

const string stringWithNewLine =
@"first line
second line
third line";
Run Code Online (Sandbox Code Playgroud)

编辑

由于这是一个const字符串,它在编译时完成,因此它是编译器对换行符的解释.我似乎找不到解释这种行为的参考,但我可以证明它按预期工作.我在Windows和Ubuntu(使用Mono)上编译了这段代码,然后进行了反汇编,结果如下:

在Windows上反汇编 在Ubuntu上反汇编

如您所见,在Windows中,换行符被解释为\ r \n,在Ubuntu上被解释为\n

  • +1在字符串文字中插入换行符的鲜为人知的方法.您指定的行为是否有任何参考?它真的是Environment.NewLine还是新行的编译器定义? (3认同)

aba*_*hev 13

var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)

  • 你为什么要这样做而不是使用更有效率和(IMO)更容易阅读的`first + Environment.NewLine + second`? (2认同)