小编典典

C#int,Int32和枚举

c#

如果intInt32为什么的代名词

enum MyEnum : Int32
{
    Value = 1
}

…不编译?在哪里

enum MyEnum : int
{
    Value = 1
}

即使将光标悬停在int单词上仍会显示struct System.Int32吗?


阅读 348

收藏
2020-05-19

共1个答案

小编典典

底层类型的确相同,但是编译器依赖于该类型作为确切的别名。这是基于解析的编译错误。我看了一下C#语法规范,并在其中定义了基于别名的基础类型(如’int’,’unit’…等)作为标记。解析器期望
整数类型 语法规则中的特定字符串。

*即使两者的enum Enum : int含义相同, *该错误也是解析错误enum Enum : Int32

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

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

2020-05-19