我有一个enum Color
,它可能衍生自long
或byte
或int
,并且我想知道它真正源自{{1 }}或long
或byte
?在此过程中,我遇到了2个问题。
首先,int
的定义如下:
Color
我写下面的代码来做这些事情:
enum Color : long
{
red = 1,
black = 2,
blue = 3
}
此刻,我遇到了我的第一个问题:Console.WriteLine(typeof(Color)); // ConsoleApp7.Color
Console.WriteLine(typeof(Color).BaseType); // System.Enum
是typeof(Color).BaseType
是令人好奇的,因为System.Enum
是Color
类型。
所以我想知道您是否定义了enum
之类的enum
类型,实际上意味着:enum Enum1 { ... }
?
基于问题1,如果我想获取其 real 基本类型,则需要编写:
class Enum1 : enum { ... }
其输出为Console.WriteLine(typeof(Color).BaseType.BaseType);
,我们知道System.ValueType
,int
和byte
均为long
,如何获得关键字 long ?
谢谢。
答案 0 :(得分:2)
您要的是基础类型,而不是基础类型:
var underlyingType = Enum.GetUnderlyingType(typeof(ConsoleColor))
还要注意,任何特定的枚举(例如您的Color
)都是值类型,System.Enum
的基本类型是System.ValueType
(尽管{ {1}}是引用类型)。这就是为什么您的System.Enum
等于typeof(Color).BaseType.BaseType