X# 中有几种不同的字符串类型。对于普通字符串,不同方言的符号可能不同:
字面量 |
VO, FoxPro & Harbour |
Vulcan & Core |
'<char>' |
String 字面量 |
Char 字面量* |
'<char>...<char>' |
String 字面量 |
Not Supported |
"<char>...<char>" |
String 字面量 |
String 字面量 |
e"<char>...<char>" |
扩展的 string 字面量* |
扩展的 string 字面量* |
i"<char>.. <char>{表达式}" |
内插 string 字面量 |
内插 string 字面量 |
ei"<char>.. <char>{表达式}" or ie"<char>.. <char>{表达式}" |
扩展的内插 string 字面量* |
扩展的内插 string 字面量* |
表中标有星号 (*) 的 <char> 字面量可能包含特殊转义码
字符 |
描述 |
不以反斜杠开头的字符 |
正常字符 |
\\ |
反斜杠 |
\" |
双引号 |
\' |
单引号 |
\0 |
0 字符 |
\a |
警告 |
\b |
退格键(Backspace) |
\f |
分页 |
\n |
换行 |
\r |
新行 |
\t |
Tab |
\v |
纵向 tab |
\x HEXDIGIT(1-4) |
字符的十六进制数。1-4 个十六进制数字 |
\u HEXGDIGIT (4 or 8) |
字符的 Unicode 编码。4 或 8 个十六进制数字 |
插值字符串是一种允许将局部变量、实例变量或其他表达式嵌入字面字符串的功能。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