如果 int Int32 同义,为什么

enum MyEnum : Int32
{
    Value = 1
}

......不编译?

enum MyEnum : int
{
    Value = 1
}

即使将光标悬停在int字上也会显示struct System.Int32?

有帮助吗?

解决方案

底层类型确实相同,但编译器依赖于类型作为确切的别名。这是基于解析的编译错误。我看了一下C#语法规范和那里定义的基础类型作为基于别名的标记(例如'int','unit'......等)。解析器需要来自整数类型语法规则的特定字符串。

错误是解析错误,即使枚举Enum:int enum Enum:Int32 相同。

我不知道强制这个限制解析步骤的原因,但我可以尝试猜测:由于Int32不是关键字,它可能引用其他实际的int结构。如果解析器必须知道类型以便为每种基本类型构建不同的 AST ,那么它不能依赖于不是关键字的令牌。

即使C#规范将 int 关键字定义为显式别名 System.Int32 ,在解析过程中获取有关显式类型(Int32)的信息仍然是个问题因为它需要大量的上下文信息,这在步骤中是无法推断的。

其他提示

一种熟悉的好奇心......语言规范陈述(14.1):

  

枚举声明可以显式声明基础类型的byte,sbyte,short,ushort,int,uint,long或ulong。请注意,char不能用作基础类型。未明确声明基础类型的枚举声明的基础类型为int。

但由于 int 只是 System.Int32 的别名,所以它不是不合理的认为要么可能有用......但事实上并非如此。这通常不是一个大问题,但也很有趣。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top