为什么char'\''与char'''相同?

时间:2014-02-26 11:07:21

标签: c# char special-characters

快速提问。为什么这两行都有效?

char x = '\"';
char y = '"';

如果“是特殊字符,第二行不应该标记为不正确吗?

2 个答案:

答案 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.