为什么可以只使用别名来声明枚举,而不使用.NET类型
本文关键字:类型 NET 枚举 别名 为什么 声明 | 更新日期: 2023-09-27 18:30:03
这非常有效
public enum NodeType : byte
{ Search, Analysis, Output, Input, Audio, Movement}
这将返回一个编译器错误
public enum NodeType : Byte
{ Search, Analysis, Output, Input, Audio, Movement}
使用反射时也会发生同样的情况。。。
那么,有人知道为什么enum
-基只是一个积分类型吗?
可能它只是一个不完整的编译器实现(尽管有文档记录)。
从技术上讲,这也应该有效,但事实并非如此。
using x = System.Byte;
public enum NodeType : x
{ Search, Analysis, Output, Input, Audio, Movement}
因此,编译器的解析器部分只允许使用固定列表byte, sbyte, short, ushort, int, uint, long, or ulong
。据我所知,没有任何技术限制。
因为规范这么说:
枚举声明:
属性opt枚举修饰符枚举体opt枚举基:
:整体式枚举主体:
{枚举成员声明opt}
{枚举成员声明,}每个枚举类型都有一个对应的整数类型,称为底层类型枚举类型的。此基础类型必须能够表示枚举中定义的枚举器值。枚举声明可以显式声明byte、sbyte、short、ushort、int、uint的底层类型,很长或很长。请注意,char不能用作基础类型。枚举未显式声明基础类型的声明具有内部的基本类型
积分类型定义为,
积分类型:
sbyte
字节
短
ushort
int
uint
长
ulong
字符
Byte、Int32等都是对象。由于枚举需要积分类型,而这些类型不是,因此会出现编译器错误。C#的枚举定义在这方面更接近于C。
这与Java非常不同,在Java中,枚举是用词不当的,因为它们实际上被命名为singleton。