【问题标题】:Why is char '\"' same as char '"'?为什么 char '\"' 与 char '"' 相同?
【发布时间】:2014-02-26 11:07:20
【问题描述】:

快速提问。为什么下面的两行都有效?

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

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

【问题讨论】:

  • 除了第一种情况外,第二种情况下可能是什么?
  • C# 没有“特殊字符”的概念。

标签: c# char special-characters


【解决方案1】:

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

不,因为语言规则不要求 " 在字符文字内转义,只在字符串文字内转义。

然而,允许它以任何一种方式被转义是一致的。这样就有一组同时适用于字符和字符串文字的转义序列,尽管\U........ 对于任何不是由单个 UTF-16 代码单元表示的代码点都会失败。

区别在于 C# 规范(字符串文字)的第 2.4.4.5 节,其中 single-regular-string-literal-character 产生式是:

除 " (U+0022)、\ (U+005C) 和 换行符之外的任何字符

与第 2.4.4.4 节(字符文字)相比,单字符产生式是:

除 ' (U+0027)、\ (U+005C) 和 换行符

之外的任何字符

如您所见,' 与您的情况相反:

string x = "'";
string y = "\'";
Console.WriteLine(x == y); // Strings are equivalent

【讨论】:

    【解决方案2】:

    只有当纯值不明确时才需要转义序列。转义序列是一种说法:编译器,出于语法理解的目的而忽略它。把它当作纯值。

    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.
    

    【讨论】:

      猜你喜欢
      • 2022-07-14
      • 2012-09-27
      • 2021-12-17
      • 2020-12-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2015-07-18
      • 2015-10-24
      相关资源
      最近更新 更多