多行插值的C#FormattableString串联

时间:2018-10-12 23:52:25

标签: c# string-concatenation formattablestring

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

documentation:C#或Visual Basic中的内插字符串可能导致FormattableString实例。

以下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类型实现多行字符串连接?

(请注意,.net Framework 4.6中添加了FormattableString。)

1 个答案:

答案 0 :(得分:1)

不变方法需要参数FormattableString type。 在您的情况下,参数$"{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}");

输出-

  

这是X这是Y这是Z

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

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

输出-

  

这是X

     

这是Y

     

这是Z