【发布时间】:2016-01-19 02:37:07
【问题描述】:
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();
或者有什么更优雅的吗?
【问题讨论】:
-
@DmytroShevchenko,我确实考虑过这样做。但是,当我看到您从 Ric 发布的链接中复制/粘贴 top voted answer 时,我不确定是否接受您的,然后对其进行编辑以使其看起来有所不同。这一切都发生在 5 分钟内,因此编辑不可见。您的回答在技术上是正确的,但我觉得您应该给予信任。我其实很想接受 Ric 的评论,但那是不可能的。
-
@DrewNoakes 您的问题已被标记为与 Ric 链接的问题重复。 Ric 也是标记它的人。因此,无需在我的答案中添加该链接的另一个实例。如果您不同意,我将不胜感激您的推理。当然,我在答案中编辑了代码。虽然,原因不是让它看起来不同,而是为了匹配你问题中的例子。
-
@DmytroShevchenko 查看该网站的页脚:根据 cc by-sa 3.0 许可的用户贡献,需要注明出处
-
投票重新开放。假定的重复问题提出了一些不同且相反的问题(他们想要源代码中的换行符,而不是字符串)。版主,请在关闭问题之前仔细阅读问题!
标签: c# .net string multiline string-interpolation