为什么可以仅使用别名声明枚举类型,而不使用.NET类型?

31 浏览
0 Comments

为什么可以仅使用别名声明枚举类型,而不使用.NET类型?

这个完美的工作了...

public  enum NodeType : byte
{ Search, Analysis, Output, Input, Audio, Movement} 

这会返回一个编译器错误...

public  enum NodeType : Byte
{ Search, Analysis, Output, Input, Audio, Movement} 

使用反射时同样会发生...

那么,有人知道为什么enum的基础只是一个整数类型吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

因为规范如此规定:

枚举声明:
属性可选 枚举修饰符可选 枚举标识符 枚举基础可选 枚举体 ;可选

枚举基础:
: 整数类型

枚举体:
{ 枚举元素声明可选 }
{ 枚举元素声明 , }

每个枚举类型都有对应的整数类型,称为枚举类型的基础类型。这个基础类型必须能表示在枚举中定义的所有枚举器值。枚举声明可以显式声明基础类型为byte、sbyte、short、ushort、int、uint、long或ulong。请注意,不能使用char作为基础类型。没有显式声明基础类型的枚举声明具有int基础类型。

...

整数类型定义为:

整数类型:
sbyte
byte
short
ushort
int
uint
long
ulong
char

0
0 Comments

可能只是一个未完成的编译器实现(虽然有文档记录)。

从技术上讲,这也应该可以工作,但实际上并没有。

using x = System.Byte;
public  enum NodeType : x
{ Search, Analysis, Output, Input, Audio, Movement}

因此,编译器的解析器部分只允许固定列表 byte、sbyte、short、ushort、int、uint、long 或 ulong。据我所知,没有技术上的限制。

0