快速提问。为什么这两行都有效?
char x = '\"';
char y = '"';
如果“是特殊字符,第二行不应该标记为不正确吗?
答案 0 :(得分:14)
如果“是特殊字符,第二行不应该标记为不正确吗?
不,因为语言规则不需要在字符文字中转义"
,只能在字符串文字中转义。
然而,允许以任何方式转义都是一致的。这样就有一组适用于字符和字符串文字的转义序列,尽管\U........
对于任何未由单个UTF-16代码单元表示的代码点都会失败。
区别在于C#规范(字符串文字)的2.4.4.5节,其中单正则字符串 - 文字字符制作是:
除“(U + 0022),\(U + 005C)和换行符
之外的任何字符
与单字符制作的第2.4.4.4节(字符文字)进行比较:
除'(U + 0027),\(U + 005C)和换行符
之外的任何字符
正如您所看到的,与您的情况相反的情况适用于'
:
string x = "'";
string y = "\'";
Console.WriteLine(x == y); // Strings are equivalent
答案 1 :(得分:3)
当纯值为ambigious时,您只需要转义序列。转义序列是一种说法:编译器,为了语法udnerstanding的目的忽略那个。把它作为纯粹的价值。
String s = """; //It would be unclear for the Compiler where the String ends and what is part of it. Hence Escape Sequencs are needed
char c = '"'; //It is clear where the Char starts and ends (the single Quotes).
char c = '''; //again unclear what of those is the Char. Escape Sequence needed.