这完美无缺。
public enum NodeType : byte
{ Search, Analysis, Output, Input, Audio, Movement}
这会返回编译器错误...
public enum NodeType : Byte
{ Search, Analysis, Output, Input, Audio, Movement}
使用反射时也是如此...
那么,有人知道为什么enum
- 基础只是一个整数类型吗?
答案 0 :(得分:9)
可能只是一个不完整的编译器实现(记录在案)。
从技术上讲,这也应该有效,但它没有。
using x = System.Byte;
public enum NodeType : x
{ Search, Analysis, Output, Input, Audio, Movement}
因此编译器的解析器部分只允许固定列表byte, sbyte, short, ushort, int, uint, long, or ulong
。我不知道有任何技术限制。
答案 1 :(得分:5)
因为the specs这样说:
enum-declaration:
attributesopt enum-modifiersopt enum identifier enum-baseopt enum-body ;optenum-base:
: integral-typeenum-body:
{ enum-member-declarationsopt }
{ enum-member-declarations , }Each enum type has a corresponding integral type called the underlying type of the enum type. This underlying type must be able to represent all the enumerator values defined in the enumeration. An enum declaration may explicitly declare an underlying type of byte, sbyte, short, ushort, int, uint, long or ulong. Note that char cannot be used as an underlying type. An enum declaration that does not explicitly declare an underlying type has an underlying type of int.
...
整数类型定义为,
integral-type:
sbyte
byte
short
ushort
int
uint
long
ulong
char
答案 2 :(得分:0)
Byte,Int32等是对象。由于枚举需要整数类型而这些不是,因此会出现编译错误。在这方面,C#的枚举定义更接近于C.
这与Java非常不同,因为它们真的被称为单例,因此枚举是用词不当。