枚举的C#BaseType

时间:2018-11-08 03:01:21

标签: c# types enums

我有一个enum Color,它可能衍生自longbyteint,并且我想知道它真正源自{{1 }}或longbyte?在此过程中,我遇到了2个问题。

首先,int的定义如下:

Color

问题1

我写下面的代码来做这些事情:

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.EnumColor类型。

所以我想知道您是否定义了enum之类的enum类型,实际上意味着:enum Enum1 { ... }

问题2

基于问题1,如果我想获取其 real 基本类型,则需要编写:

class Enum1 : enum { ... }

其输出为Console.WriteLine(typeof(Color).BaseType.BaseType); ,我们知道System.ValueTypeintbyte均为long,如何获得关键字 long

谢谢。

1 个答案:

答案 0 :(得分:2)

您要的是基础类型,而不是基础类型:

var underlyingType = Enum.GetUnderlyingType(typeof(ConsoleColor))

还要注意,任何特定的枚举(例如您的Color)都是值类型,System.Enum的基本类型是System.ValueType(尽管{ {1}}是引用类型)。这就是为什么您的System.Enum等于typeof(Color).BaseType.BaseType