8

在 C#7 中,我尝试使用多行插值字符串与FormttableString.Invariant一起使用,但字符串连接似乎对 FormttableString 无效。

根据文档: FormattableString 实例可能来自 C# 或 Visual Basic 中的插值字符串。

以下 FormttableString 多行连接无法编译:

using static System.FormattableString;
string build = Invariant($"{this.x}" 
                       + $"{this.y}"
                       + $"$this.z}");

错误 CS1503 - 参数 1:无法从“字符串”转换为“System.FormattableString”

使用没有连接的插值字符串可以编译:

using static System.FormattableString;
string build = Invariant($"{this.x}");

你如何实现与类型的多行字符串连接FormattableString

(请注意 FormattableString 是在 .Net Framework 4.6 中添加的。)

4

1 回答 1

8

Invariant 方法需要FormattableString type的参数。在您的情况下,参数 $"{this.x}" + $"{this.y}"变为"string" + "string'which 将评估为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}");

输出 -

这是X 这是Y 这是Z

为了实现multiline插值,您可以像下面那样构建 FormattableString,然后使用 Invarient。

FormattableString fs = $@"{this.X}
{this.Y}
{this.Z}";
string build = Invariant(fs);

输出 -

这是X

这是Y

这是Z

于 2018-10-13T00:25:04.923 回答