在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。)
答案 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