C#6中的长string插值行

我发现,当应用于我现有的代码库的stringFormat调用时,string插值是非常好的,给定通常首选的字段限制,string对于单行很快变得太长。 特别是当插入的expression式很复杂时。 使用格式string,您可以将variables列表分割成多行。

var str = string.Format("some text {0} more text {1}", obj1.property, obj2.property); 

有没有人有任何分手这些线路的首选方法?

我想你可以做一些事情:

 var str = $"some text { obj1.property }" + " more text { obj2.property }; 

可以把行分成多行,但我不会说语法看起来不错。

您需要使用$@语法来使用内插的逐字string,并且可以在{...}参数中放置换行符,如下所示:

 string s = $@"This is all { 10 } going to be one long { DateTime.Now } line."; 

上面的string不会包含任何换行符,并且实际上会有这样的内容:

这一切都将是一个长01.08.2015 23.49.47线。

(注意,挪威格式)

现在,已经说了,我不会停止使用string.Format 。 在我看来,这些string插值expression式看起来非常好,但更复杂的开始变得很难阅读。 考虑到除非你使用FormattableString ,否则代码将被编译成一个对String.Format的调用,无论如何,我会说继续使用String.Format

你可以将$@结合在一起得到string插值和多行string文字:

 var str = $@"some text { obj1.property } more text { obj2.property }"; 

但是这会给你一个NewLine字符,所以它可能不是你想要的。

OP问别的东西,但我希望很多人阅读这个问题会喜欢多行内插$"" ,像@"" 。 要做到这一点,请使用$@""

 $@"Height: {height} Width: {width} Background: {background}" 

我已经使用重写的ToString()中的StringBuilder作为示例。

  // return employee data public override string ToString() { StringBuilder buffer = new StringBuilder(); buffer.AppendLine($"Number: {EmployeeNumber}"); buffer.AppendLine($"Name: {EmployeeName}"); buffer.AppendLine($"Address: {PostalAddress}"); buffer.AppendLine($"Phone: {PhoneNumber}"); buffer.AppendLine($"Age: {EmployeeAge}"); buffer.AppendLine($"Gender: {EmployeeGender}"); buffer.AppendLine($"Status: {EmployeeStatus}"); buffer.AppendLine($"Manager: {EmployeeManager}"); buffer.AppendLine($"Start: {EmployeeStartDate.ToShortDateString()}"); return buffer.ToString(); } 

就是这个:

 var str = $"some text { obj1.property }" + $" more text { obj2.property }"; 

注意$"..." + $"..."的第二个$