C#FormattableString用于多行插值的连接

C# FormattableString concatenation for multiline interpolation

在C 7中,我尝试使用一个多行内插字符串与formttableString一起使用。不变量,但字符串连接似乎对formttableString无效。

根据文档:FormattableString实例可能是由C或VisualBasic中的插入字符串产生的。

以下FormttableString多行连接未编译:

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

Error CS1503 - Argument 1: cannot convert from 'string' to
'System.FormattableString'

使用不带串联的内插字符串编译:

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

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

(请注意,formattablestring was added in.NET Framework 4.6.)


不变量方法需要FormattableString类型的参数。在您的情况下,参数$"{this.x}" + $"{this.y}"变为"string" +"string',将对string类型的输出进行评估。这就是您得到编译错误的原因,因为Invariant期望的是FormattableString,而不是string

对于单行文本,应该尝试使用此方法-

1
2
3
4
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}");

输出-

This is X This is Y This is Z

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

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

输出-

This is X

This is Y

This is Z