C#6通过以下语法为内插字符串文字带来了编译器支持:
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();
还是有一些更优雅的东西?