Eug*_*ene 6 c# string-concatenation formattablestring
在 C#7 中,我尝试使用多行内插字符串与FormttableString.Invariant一起使用,但字符串连接似乎对 FormttableString 无效。
根据文档: FormattableString 实例可能由 C# 或 Visual Basic 中的内插字符串产生。
以下 FormttableString 多行连接无法编译:
using static System.FormattableString;
string build = Invariant($"{this.x}"
+ $"{this.y}"
+ $"$this.z}");
Run Code Online (Sandbox Code Playgroud)
错误 CS1503 - 参数 1:无法从“字符串”转换为“System.FormattableString”
使用没有连接的内插字符串确实可以编译:
using static System.FormattableString;
string build = Invariant($"{this.x}");
Run Code Online (Sandbox Code Playgroud)
你如何用类型实现多行字符串连接FormattableString?
(请注意 FormattableString 是在 .Net Framework 4.6 中添加的。)
Vin*_*nit 17
FormattableString Invariant 方法需要类型为 的参数。在您的情况下,参数 将$"{this.x}" + $"{this.y}"评估"string" + "string'为string类型输出。Invariant这就是您收到预期的编译错误的原因,FormattableString而不是string。
您应该尝试对单行文本执行此操作 -
public string X { get; set; } = "This is X";
public string Y { get; set; } = "This is Y";
public string Z { get; set; } = "This is Z";
string build = Invariant($"{this.x} {this.y} {this.z}");
Run Code Online (Sandbox Code Playgroud)
输出 -
这是X 这是Y 这是Z
要实现multiline插值,您可以像下面一样构建 FormattableString,然后使用 Invarient。
FormattableString fs = $@"{this.X}
{this.Y}
{this.Z}";
string build = Invariant(fs);
Run Code Online (Sandbox Code Playgroud)
输出 -
这是X
这是Y
这是Z