首页 > 代码库 > C# 支持两种形式的字符串:规则字符串和逐字字符串(@字符串)
C# 支持两种形式的字符串:规则字符串和逐字字符串(@字符串)
规则字符串由包含在双引号中的零个或多个字符组成(如 "hello"),并且可以包含简单转义序列(如表示制表符的 \t)、十六进制转义序列和 Unicode 转义序列。
逐字字符串由 @ 字符后跟开始的双引号字符、零个或多个字符以及结束的双引号字符组成。一个简单的示例就是 @"hello"。在逐字字符串中,分隔符之间的字符逐字解释,唯一的例外是“引号转义序列”。具体说来,在逐字字符串中不处理简单转义序列以及十六进制 和 Unicode 转义序列。逐字字符串可以跨多行。
规则字符串字符中跟在反斜杠字符 (\) 后面的字符必须是下列字符之一:‘、"、\、0、a、b、f、n、r、t、u、U、x、v。否则将发生编译时错误。
示例
string a = "hello, world"; // hello, world
string b = @"hello, world"; // hello, world
string c = "hello \t world"; // hello world
string d = @"hello \t world"; // hello \t world
string e = "Joe said \"Hello\" to me"; // Joe said "Hello" to me
string f = @"Joe said ""Hello"" to me"; // Joe said "Hello" to me
string g = "\\\\server\\share\\file.txt"; // \\server\share\file.txt
string h = @"\\server\share\file.txt"; // \\server\share\file.txt
string i = "one\r\ntwo\r\nthree";
string j = @"one
two
three";
显示了各种不同的字符串。最后一个字符串 j 是跨多行的逐字字符串。引号之间的字符(包括空白,如换行符等)也逐字符保留。
由于十六进制转义序列可以包含数目可变的十六进制数字,因此字符串 "\x123" 只包含一个具有十六进制值 123 的字符。若要创建一个包含具有十六进制值 12 的字符,后跟一个字符 3 的字符串,可以改写为 "\x00123" 或 "\x12" + "3"。
“字符串”的类型为 string。
每个字符串不一定产生新的字符串实例。当根据字符串相等运算符确认为相等的两个或更多个字符串出现在同一个程序集中时,这些字符串引用相同的字符串实例。例如,
class Test
{
static void Main() {
object a = "hello";
object b = "hello";
System.Console.WriteLine(a == b);
}
}
产生的输出为 True,这是因为两个字符串引用相同的字符串实例。