从C语言走过来的我们,对转义字符早已很熟悉了,知道使用各种转义字符来实现输入各种具有特列意义的字符或者其他需要转义的字符。
C#允许按常规的转义字符处理的方式来给字符串常量赋值,如果编译器检测到你正在为一个字符串变量赋值,你在其中写的双斜扛将不会被当作注释符。例如,下面的赋值是合法的,我们可以通过下面的赋值语句给变量赋予带有双斜杠的值:
string DbSlashURL = “http://www.ciznx.com/”;
string DbEscapeFullFilePath = “C:\inetput\ciznxcom\”; //带转义的字符串赋值语句
这里列举一些常用的转义字符,备查:
转义符 | 字 符 名 | 字符的**Unicode值** | 转义符 | 字 符 名 | 字符的**Unicode值** |
\' | 单引号 | 0x0027 | \f | 换页 | 0x000c |
\" | 双引号 | 0x0022 | \n | 新行 | 0x000A |
\\ | 反斜杠 | 0x005c | \r | 回车 | 0x000D |
\0 | 空字符 | 0x0000 | \t | 水平制表符 | 0x0009 |
\a | 警告(产生蜂鸣) | 0x0007 | \v | 垂直制表符 | 0x000B |
\b | 退格 | 0x0008 |
更加令我们欣喜的是,C#的作者很大方地将字符串赋值这一功能做了十分广阔的扩展:在C#中,我们可以将所有字符直接作为字符串常量的值赋给字符串量,甚至包括了平时在我们看来是一定需要转义的各种字符;要实现这一切仅需要在字符串常量的值前加一个符号“@”,以这种形式赋值的字符串叫做逐字字符串,它后面的所有字符都被逐个地收录到字符串的值中!
因此,如果你需要类似“所见所得”效果的赋值,逐字字符串赋值方式会是你的首选!
此外,需要注意的是,当使用符号 “@” 为字符串赋值时,被赋值的所有字符将不需要经过转义——只有双引号这个本身作为界限的字符需要经过转义,此时它的转义输入方法是两个放在一起的双引号:””
在以这种方式给变量赋值时,也只有这唯一一个转义是合法的。如果希望诸如换行、制表符此类字符在字符串体现出来,也可以直接将带有换行与制表符的字面量字符串赋给字符串量;不过这样,就不能在换行前的前一行写注释或其他语句,否则这些语句将被当作字符串值的一部分。
在下面例子中的语句,可以实现不完成输入一系列不经转义的特殊字符:
string NoEscapeFullFileName = @“C:\inetpub\ciznxcom\“; // (此句中的反斜扛被直接赋值)
string StringWithDbQoute = @“Jim says,”“he can reach home in about six minutes”“.“ //(此句中双引号被转义)
string StringWithNextLineChar = @“We can set a string value for a string variable
with such a ““NextLine”” char.“; // (此句中给字符串变量赋予了换行符,且未经任何转义;在上一行的单词 variable 之后如果不希望有更多内容,则不能在后面写任何内容,包括注释)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<td style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 86.05pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in" valign="top" width="115"> <div style="line-height: 13.5pt; text-indent: 23.3pt; layout-grid-mode: char; margin-bottom: 1pt; punctuation-trim: leading"><span style="letter-spacing: 0pt; font-size: 9pt">0x000B</span></div> </td> </tr> <tr> <td style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 46pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0in" valign="top" width="61"> <div style="text-align: center; line-height: 13.5pt; layout-grid-mode: char; margin-bottom: 1pt; punctuation-trim: leading" align="center"><span style="letter-spacing: 0pt; font-size: 9pt">\b</span></div> </td> <td style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 77pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0in" valign="top" width="103"> <div style="line-height: 13.5pt; layout-grid-mode: char; margin-bottom: 1pt; punctuation-trim: leading"><span style="letter-spacing: 0pt; font-size: 9pt">退格</span></div> </td> <td style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 82.3pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1.5pt double; padding-top: 0in" valign="top" width="110"> <div style="text-align: center; line-height: 13.5pt; layout-grid-mode: char; margin-bottom: 1pt; punctuation-trim: leading" align="center"><span style="letter-spacing: 0pt; font-size: 9pt">0x0008</span></div> </td> <td style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 48.6pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0in" valign="top" width="65"> <div style="text-align: center; line-height: 13.5pt; layout-grid-mode: char; margin-bottom: 1pt; punctuation-trim: leading" align="center"> </div> </td> <td style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 70.65pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0in" valign="top" width="94"> <div style="line-height: 13.5pt; layout-grid-mode: char; margin-bottom: 1pt; punctuation-trim: leading"> </div> </td> <td style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 86.05pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in" valign="top" width="115"> <div style="line-height: 13.5pt; layout-grid-mode: char; margin-bottom: 1pt; punctuation-trim: leading"> </div> </td> </tr> </tbody> |
更加令我们欣喜的是,C#的作者很大方地将字符串赋值这一功能做了十分广阔的扩展:在C#中,我们可以将所有字符直接作为字符串常量的值赋给字符串量,甚至包括了平时在我们看来是一定需要转义的各种字符;要实现这一切仅需要在字符串常量的值前加一个符号“@”,以这种形式赋值的字符串叫做逐字字符串,它后面的所有字符都被逐个地收录到字符串的值中!
因此,如果你需要类似“所见所得”效果的赋值,逐字字符串赋值方式会是你的首选!
此外,需要注意的是,当使用符号 “@” 为字符串赋值时,被赋值的所有字符将不需要经过转义——只有双引号这个本身作为界限的字符需要经过转义,此时它的转义输入方法是两个放在一起的双引号:””
在以这种方式给变量赋值时,也只有这唯一一个转义是合法的。如果希望诸如换行、制表符此类字符在字符串体现出来,也可以直接将带有换行与制表符的字面量字符串赋给字符串量;不过这样,就不能在换行前的前一行写注释或其他语句,否则这些语句将被当作字符串值的一部分。
在下面例子中的语句,可以实现不完成输入一系列不经转义的特殊字符:
string NoEscapeFullFileName = @“C:\inetpub\ciznxcom\“; // (此句中的反斜扛被直接赋值)
string StringWithDbQoute = @“Jim says,”“he can reach home in about six minutes”“.“ //(此句中双引号被转义)
string StringWithNextLineChar = @“We can set a string value for a string variable
with such a ““NextLine”” char.“; // (此句中给字符串变量赋予了换行符,且未经任何转义;在上一行的单词 variable 之后如果不希望有更多内容,则不能在后面写任何内容,包括注释)