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

在.NET中,我可以提供\r\nstring文字,但是有一种方法来插入像“新行”特殊字符像Environment.NewLine静态属性?

那么简单的select是:

  • string.Format

     string x = string.Format("first line{0}second line", Environment.NewLine); 
  • string连接:

     string x = "first line" + Environment.NewLine + "second line"; 
  • string插值(在C#6及更高版本中):

     string x = $"first line{Environment.NewLine}second line"; 

你也可以在任何地方使用\ n,并replace:

 string x = "first line\nsecond line\nthird line".Replace("\n", Environment.NewLine); 

请注意,您不能将此string设置为常量 ,因为Environment.NewLine的值仅在执行时可用。

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

 const string stringWithNewLine = @"first line second line third line"; 

编辑

由于这是一个常量string,因此它是在编译时完成的,因此它是编译器对新行的解释。 我似乎无法find解释这种行为的参考,但我可以certificate它的工作原理。 我编译了这个代码在Windows和Ubuntu(与单声道)然后反汇编,这些是结果:

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

正如你所看到的,在Windows中,换行符被解释为\ r \ n,在Ubuntu上被解释为\ n

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

Environment.NewLine方便放置在格式string中的另一种方法。 这个想法是创buildstring扩展方法,它像往常一样格式化string,但也用Environment.NewLinereplace文本中的{nl}

用法

  " X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2); gives: X=1 Y=2 X+Y=3 

  ///<summary> /// Use "string".FormatIt(...) instead of string.Format("string, ...) /// Use {nl} in text to insert Environment.NewLine ///</summary> ///<exception cref="ArgumentNullException">If format is null</exception> [StringFormatMethod("format")] public static string FormatIt(this string format, params object[] args) { if (format == null) throw new ArgumentNullException("format"); return string.Format(format.Replace("{nl}", Environment.NewLine), args); } 

注意

  1. 如果你想要ReSharper突出你的参数,添加属性到上面的方法

    [StringFormatMethod( “格式化”)]

  2. 这个实现显然比String.Format效率低

  3. 也许一个对这个问题感兴趣的人也会对下一个问题感兴趣: 在C#中命名的string格式

 string myText = @"<div class=""firstLine""></div> <div class=""secondLine""></div> <div class=""thirdLine""></div>"; 

不是这个:

 string myText = @"<div class=\"firstLine\"></div> <div class=\"secondLine\"></div> <div class=\"thirdLine\"></div>"; 
 static class MyClass { public const string NewLine="\n"; } string x = "first line" + MyClass.NewLine + "second line" 

如果你真的想要新的string作为一个常量,那么你可以这样做:

 public readonly string myVar = Environment.NewLine; 

C#中readonly关键字的用户意味着这个variables只能被赋值一次。 你可以在这里find它的文档。 它允许声明一个常量variables,它的值在执行时间之前是未知的。

我更喜欢“pythonic方式”

 List<string> lines = new List<string> { "line1", "line2", String.Format("{0} - {1} | {2}", someVar, othervar, thirdVar ) }; if(foo) lines.Add("line3"); return String.Join(Environment.NewLine, lines); 

如果我理解这个问题:夫妇“\ r \ n”在文本框中获取下面的新行。 我的例子工作 –

strings1 = comboBox1.Text; // s1是分配给box 1的variables,等等。string s2 = comboBox2.Text;

string both = s1 +“\ r \ n”+ s2; textBox1.Text = both; 典型的答案可以是使用定义的types风格的文本框中的s1 s2。

较新的.net版本允许你在文字前面使用$,这允许你在里面使用variables,如下所示:

 var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3"; 

如果你正在使用Web应用程序,你可以试试这个。

 StringBuilder sb = new StringBuilder(); sb.AppendLine("Some text with line one"); sb.AppendLine("Some mpre text with line two"); MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />") 

您可以在行中插入换行符HTML标记。 当浏览器呈现它时,你将有一个新的线。

 string variable = "Line one Content" + "<br>" + "Line two Content"; 

这将呈现为:

 Line one Content Line two Content 

我没有find一个浏览器,这不工作。