如果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
它是不是不合理认为无论是可能的工作...但它确实没有.这通常不是一个大问题,但也很有趣.
归档时间: |
|
查看次数: |
5106 次 |
最近记录: |