C#int,Int32和枚举

如果intInt32同义,为什么呢

enum MyEnum : Int32
{
    Value = 1
}

...不编译? 在哪里

enum MyEnum : int
{
    Value = 1
}

即使将光标悬停在整数字上,也会显示结构System.Int32?


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

即使enum Enum : int意味着与enum Enum : Int32相同, 该错误仍然是解析错误

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

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


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

枚举声明可以显式声明一个基本类型的字节,sbyte,short,ushort,int,uint,long或ulong。 请注意,char不能用作基础类型。 没有明确声明基础类型的枚举声明具有基础类型的int。

但是因为int 通常只是System.Int32的别名,所以认为两者都可以工作并不是不合理的......但实际上并不是这样。 这通常不是一个大问题,但毫不困难。

链接地址: http://www.djcxy.com/p/21051.html

上一篇: C# int, Int32 and enums

下一篇: If Int32 is just an alias for int, how can the Int32 class use an int?