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 }";
注意$"..." + $"..."
的第二个$