如果int是Int32为什么的代名词
int
Int32
enum MyEnum : Int32 { Value = 1 }
…不编译?在哪里
enum MyEnum : int { Value = 1 }
即使将光标悬停在int单词上仍会显示struct System.Int32吗?
底层类型的确相同,但是编译器依赖于该类型作为确切的别名。这是基于解析的编译错误。我看了一下C#语法规范,并在其中定义了基于别名的基础类型(如’int’,’unit’…等)作为标记。解析器期望 整数类型 语法规则中的特定字符串。
*即使两者的enum Enum : int含义相同, *该错误也是解析错误enum Enum : Int32。
enum Enum : int
enum Enum : Int32
我不知道强制执行此限制以进行解析步骤的原因,但我可以尝试猜测:由于Int32不是关键字,因此它可能引用了其他实际的int结构。如果解析器必须知道类型以便为每种基本类型构建不同的AST,则它不能依赖不是关键字的令牌。
即使C#规范将 int 关键字定义为显式别名 System.Int32 ,在解析步骤期间获取有关显式类型(Int32)的信息仍然是一个问题,因为它需要很多上下文信息,而在此步骤中无法推断出这些信息。