2.6 字符串和字符
C#的char(System.Char类型的别名)类型表示一个Unicode字符并占用两个字节(UTF-16)。char字面量应位于两个单引号之间:
转义序列指那些不能用字面量表示或解释的字符。转义字符由反斜线和一个表示特殊含义的字符组成,例如:
表2-2中列出了转义序列字符。
表2-2:转义序列字符
表2-2:转义序列字符(续)
\u(或\x)转义字符通过4位十六进制代码来指定任意Unicode字符:
2.6.1 char转换
若从char类型隐式转换为数值类型,则这个数值类型必须能够容纳无符号short类型。对于其他的数值类型,则需要显式转换。
2.6.2 字符串类型
C#中的字符串类型(System.String类型的别名,我们将在第6章详细介绍)表示不可变(创建之后即无法更改)的Unicode字符序列。字符串字面量应位于两个双引号之间:
string类型是引用类型而不是值类型,但是它的相等运算符却遵守值类型的语义:
字符串中的转义字符和char字面量的转义字符是一致的:
这意味着当需要一个反斜杠时,需要写两次才可以:
为避免这种情况,C#引入了原意字符串字面量。原意字符串字面量要加@前缀,它不支持转义字符。下面的原意字符串和之前的字符串是一样的:
原意字符串可以贯穿多行:
原意字符串中需要用两个双引号来表示一个双引号字符:
2.6.2.1 字符串连接
+运算符可连接两个字符串:
如果操作数之一是非字符串值,则会调用ToString方法将其转换为字符串:
重复使用+运算符来构建字符串是低效的。更好的解决方案是使用System.Text.StringBuilder类型(将在第6章介绍)。
2.6.2.2 字符串插值
以$字符为前缀的字符串称为插值字符串。插值字符串可以在大括号内包含表达式:
大括号内可以是任意类型的合法C#表达式。C#会调用ToString方法或等价方法将表达式转换为字符串。如需更改表达式的格式,可以使用冒号,并附加格式字符串(我们将在6.1.2.7节中进行详细介绍):
如果代码中的冒号有其他用途(例如,三元条件运算符),则需要将整个表达式使用括号包裹起来:
插值字符串只能在单行内声明。如需在多行中声明字符串,请使用原意字符串运算符:
若要在插值字符串中表示大括号,只需书写两个大括号字符即可。
2.6.2.3 字符串比较
string类型不支持<和>的比较,必须使用字符串的CompareTo方法。我们将在第6章介绍这部分内容。
2.6.2.4 常量字符串插值(C# 10)
从C# 10开始,如果字符串插值中的值为常量(字符串),则插值后的字符串仍然可以是常量: