C#6带来了语法插值字符串文字编译器的支持:多行C#插值字符串字面
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
这是伟大的短字符串,但如果你想制作一个更长的字符串必须将其在单一指定线?
与其他类型的字符串,您可以:
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
或者:
var multi2 = string.Format(
"Height: {1}{0}" +
"Width: {2}{0}" +
"Background: {3}",
Environment.NewLine,
height,
width,
background);
我不能找到一种方法,用绳子插值实现这一目标,而不必一切一一行:
var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
我意识到在这种情况下,您可以使用\r\n
代替Environment.NewLine
(便携性较低),或将其拉出到本地,但会出现不能将其缩小到一行而不会损失语义强度的情况。
是不是应该将字符串插值用于长字符串?
我们应该只使用StringBuilder
来处理更长的字符串吗?
var multi4 = new StringBuilder()
.AppendFormat("Width: {0}", width).AppendLine()
.AppendFormat("Height: {0}", height).AppendLine()
.AppendFormat("Background: {0}", background).AppendLine()
.ToString();
还是有更优雅的东西?
http://stackoverflow.com/questions/31764898/long-string-interpolation-lines-in-c6 – Ric
@DmytroShevchenko,我确实考虑过这样做。不过,我不确定是否接受你的,因为我看着你从Ric发布的链接复制/粘贴[top voteed answer](http://stackoverflow.com/a/31764920/24874),然后编辑它看起来不同。这一切都在5分钟内发生,因此编辑不可见。你的回答在技术上是正确的,但我觉得你应该给予信任。我实际上想接受Ric的评论,但那不可能。 –
@DrewNoakes您的问题已被标记为由Ric链接的问题的副本。里克也是标记它的人。所以没有必要为我的答案添加另一个链接的实例。如果你不同意,我会很感激你的推理。当然,我在我的答案中编辑了代码。虽然,原因不是让它看起来不同,而是要匹配你的问题中的例子。 –