Multiline C# interpolated string literal
C 6提供了编译器对插入字符串文本的语法支持:
1 2 3 |
这对于短字符串很好,但如果要生成更长的字符串,必须在一行上指定它?
使用其他类型的字符串,您可以:
1 2 3 4 5 6 | var multi1 = string.Format(@"Height: {0} Width: {1} Background: {2}", height, width, background); |
或:
1 2 3 4 5 6 7 8 | var multi2 = string.Format( "Height: {1}{0}" + "Width: {2}{0}" + "Background: {3}", Environment.NewLine, height, width, background); |
我找不到一种方法可以通过字符串插值来实现这一点,而不需要所有的一行:
1 | var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}"; |
我知道在这种情况下,你可以用
代替
字符串插值不应该用于长字符串,这是简单的情况吗?
我们应该只使用
1 2 3 4 5 | var multi4 = new StringBuilder() .AppendFormat("Width: {0}", width).AppendLine() .AppendFormat("Height: {0}", height).AppendLine() .AppendFormat("Background: {0}", background).AppendLine() .ToString(); |
还是有更优雅的东西?
可以将
1 2 3 4 | string s = $@"Height: {height} Width: {width} Background: {background}"; |
来源:C 6中的长字符串插值行(感谢@ric找到线程!)
我可能会使用组合
1 2 3 4 | var builder = new StringBuilder() .AppendLine($"Width: {width}") .AppendLine($"Height: {height}") .AppendLine($"Background: {background}"); |
就我个人而言,我只是使用字符串串联添加另一个内插字符串
例如
1 2 3 | var multi = $"Height : {height}{Environment.NewLine}" + $"Width : {width}{Environment.NewLine}" + $"Background : {background}"; |
我发现这更容易格式化和阅读。
与使用$@""相比,这将有额外的开销,但只有在性能最关键的应用程序中,这一点才值得注意。与数据I/O相比,内存中的字符串操作非常便宜。在大多数情况下,从数据库中读取单个变量将花费数百倍的时间。