我有一个enum Color,它可能派生自longor byteor int,我想知道它真正派生自什么类型,longor byteor int?在这个过程中,我遇到了2个问题。
首先, 的Color定义如下:
enum Color : long
{
red = 1,
black = 2,
blue = 3
}
Run Code Online (Sandbox Code Playgroud)
我编写下面的代码来执行此类操作:
Console.WriteLine(typeof(Color)); // ConsoleApp7.Color
Console.WriteLine(typeof(Color).BaseType); // System.Enum
Run Code Online (Sandbox Code Playgroud)
这时,我遇到了我的第一个问题:很好奇的是typeof(Color).BaseType,System.Enum因为Color是一种enum类型。
所以我想知道您是否定义了enum类似的类型enum Enum1 { ... },它实际上意味着:class Enum1 : enum { ... }?
基于问题1,如果我想得到它真正的基类型,我需要写:
Console.WriteLine(typeof(Color).BaseType.BaseType);
Run Code Online (Sandbox Code Playgroud)
它的输出是System.ValueType,我们知道int,byte而且long都是System.ValueType,我怎样才能得到关键字long?
谢谢。
您需要底层类型,而不是基本类型:
var underlyingType = Enum.GetUnderlyingType(typeof(ConsoleColor))
Run Code Online (Sandbox Code Playgroud)
另请注意,任何特定的枚举(例如您的)都是值类型,并且is 的Color基类型(尽管事实上它是引用类型)。这就是为什么你等于System.EnumSystem.ValueTypeSystem.Enumtypeof(Color).BaseType.BaseTypeSystem.ValueType