枚举类型是否存储为C#中的int?

时间:2011-07-23 16:44:39

标签: c#

枚举类型是否存储为C#中的整数?

下面的枚举是否会表示为0,1,2?

如果没有,定义枚举最轻的方法是什么?

public enum ColumnType
{
    INT,STRING,OBJECT
}

6 个答案:

答案 0 :(得分:5)

是的,enum默认存储为int,如here所示。

您还可以指定基础类型,例如:

enum Foo : short
{
    Bar,
    Baz
}

虽然通常没有必要。

答案 1 :(得分:5)

From the MSDN

  

枚举元素的默认基础类型是int。

     

默认情况下,第一个枚举数的值为0,每个连续枚举数的值增加1。

所以你的假设是正确的。 Enum存储为int s,您的示例将表示为0,1,2。但是,您不应该依赖此而始终通过以下方式引用它们他们的指定名称,以防万一有人覆盖默认名称。

答案 2 :(得分:2)

默认是:

http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.80).aspx

  

enum关键字用于声明枚举,一种不同的类型   由一组名为常量的枚举器列表组成。   每个枚举类型都有一个底层类型,可以是任何类型   整数类型除了char。默认的底层类型   枚举元素是int。默认情况下,第一个枚举器具有   值0,每个连续枚举器的值增加   1。

答案 3 :(得分:2)

enum的默认基础类型是int,但可以显式使用不同的类型。例如,您可以使用byte

enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/sbbt4032.aspx

答案 4 :(得分:1)

每个枚举类型都有一个基础类型,除了char之外,它可以是任何整数类型。 是的,你的枚举默认表示为0,1,2,这是定义枚举

的最轻的方法

如何定义枚举,方法是将起始值定义为您的要求,并明确地为每个枚举成员分配整数值

答案 5 :(得分:1)

关于底层类型的观点已经很好了,所以我将添加一个不同的上下文:

在IL /运行时级别,枚举的实例不存在。它们只存在:

a:编译器 b:将运行时作为盒装值 c:在元数据(参数/字段/变量声明)

在所有其他时间,它们纯粹是整数类型的值(最常见的是int)。编译器使用枚举变量(等)进行静态分析,重载解析等,但它发出的操作码与为常量/文字整数值发出的操作码相同;即。

SomeEnum foo = SomeEnum.WithValueOne;
int bar = 1;

将具有相同的IL(可能是变量类型除外)。

它唯一有趣的时间是发出一个盒子操作,或者调用像.ToString()等。

所以:只要你没有将它们打包(将它们存储在object字段/ etc中),那么(在运行时)枚举或整数在存储方面没有显着差异或性能(除非你使用.ToString()等)