C#int,Int32和enums

33 .net c# int enums int32

如果int是同义词的Int32原因

enum MyEnum : Int32
{
    Value = 1
}
Run Code Online (Sandbox Code Playgroud)

......不编译?在哪里

enum MyEnum : int
{
    Value = 1
}
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*sha 30

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

错误是解析错误,即使两者都enum Enum : int意味着相同enum Enum : Int32.

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

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


Mar*_*ell 14

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

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

但是,由于int通常只是一个别名,System.Int32它是不是不合理认为无论是可能的工作...但它确实没有.这通常不是一个大问题,但也很有趣.