插值字符串是一种允许将局部变量、实例变量或其他表达式嵌入字面字符串的功能。X# 支持两种插值字符串:
其工作方式与普通 X# 字符串类似,内嵌表达式:
FUNCTION Start AS VOID
LOCAL Who AS STRING
Who := "World"
Console.Writeline( i"Hello {Who}")
Console.Read()
RETURN
这是插值字符串和扩展字符串的组合。在下面的示例中,\t 将被 tab 字符替换:
FUNCTION Start AS VOID
LOCAL Who AS STRING
Who := "World"
Console.Writeline( ie"Hello\t{Who}")
Console.Read()
RETURN
X# 内的插值字符串可以包含以下形式的表达式
{<interpolationExpression>[,<alignment>][::<formatString>]}
在 C# 中,formatString 的前缀是单冒号。请注意,由于在 X# 中,冒号(:)操作符是实例字段、属性和方法的默认成员访问操作符,因此并不总是可以使用该操作符来分隔表达式和格式字符串。因此,我们将该操作符改为双冒号(::)。如果使用 /allowdot+ 进行编译,也可以使用单冒号作为格式分隔符。
要表示字面上的“{”或“}”字符,必须在字符串中复制它们。本例中字符串内的表达式用斜体表示。
FUNCTION Start() AS VOID
local X := 2 as INT
local Y := 3 as INT
var pointMessage := i"The point {{{X}, {Y}}} is {Math.Sqrt(X * X + Y * Y)::F3} from the origin"
Console.WriteLine(pointMessage)
// 输出结果:
// The point {2, 3} is 3.606 from the origin
字符串内的表达式元素可以使用格式化符号,就像 String.Format() 符号一样。例如:
FUNCTION Start AS VOID
LOCAL i AS INT
i := 42
Console.Writeline( i"Hello {i:x}") // i 用十六进制表示,所以输出 Hello 2a
Console.Read()
RETURN