用于多行插值的 C# FormattableString 串联
C# FormattableString concatenation for multiline interpolation
在 C#7 中,我尝试使用多行内插字符串与 FormttableString.Invariant 一起使用,但字符串连接似乎对 FormttableString 无效。
根据 documentation:FormattableString 实例可能来自 C# 或 Visual Basic 中的内插字符串。
以下 FormttableString 多行连接不编译:
using static System.FormattableString;
string build = Invariant($"{this.x}"
+ $"{this.y}"
+ $"$this.z}");
Error CS1503 - Argument 1: cannot convert from 'string' to
'System.FormattableString'
使用没有连接的内插字符串编译:
using static System.FormattableString;
string build = Invariant($"{this.x}");
如何使用 FormattableString
类型实现 多行 字符串连接?
(请注意 FormattableString 是在 .Net Framework 4.6 中添加的。)
Invariant 方法需要 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}");
输出-
This is X This is Y This is Z
要实现 multiline
插值,您可以像下面那样构建 FormattableString,然后使用 Invarient。
FormattableString fs = $@"{this.X}
{this.Y}
{this.Z}";
string build = Invariant(fs);
输出-
This is X
This is Y
This is Z
在 C#7 中,我尝试使用多行内插字符串与 FormttableString.Invariant 一起使用,但字符串连接似乎对 FormttableString 无效。
根据 documentation:FormattableString 实例可能来自 C# 或 Visual Basic 中的内插字符串。
以下 FormttableString 多行连接不编译:
using static System.FormattableString;
string build = Invariant($"{this.x}"
+ $"{this.y}"
+ $"$this.z}");
Error CS1503 - Argument 1: cannot convert from 'string' to 'System.FormattableString'
使用没有连接的内插字符串编译:
using static System.FormattableString;
string build = Invariant($"{this.x}");
如何使用 FormattableString
类型实现 多行 字符串连接?
(请注意 FormattableString 是在 .Net Framework 4.6 中添加的。)
Invariant 方法需要 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}");
输出-
This is X This is Y This is Z
要实现 multiline
插值,您可以像下面那样构建 FormattableString,然后使用 Invarient。
FormattableString fs = $@"{this.X}
{this.Y}
{this.Z}";
string build = Invariant(fs);
输出-
This is X
This is Y
This is Z