2011-07-23 25 views
5

在C#中存储为整数的枚举类型?枚举类型存储为C#中的整数吗?

将下面的枚举表示为0,1,2?

如果不是,定义一个枚举最轻的方法是什么?

public enum ColumnType 
{ 
    INT,STRING,OBJECT 
} 
+0

你是什么意思'最轻的方式',内存消费? –

+0

小调;大写名字是不常见的;不无效...只是不寻常的。 –

回答

5

From the MSDN

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

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

所以你的假设是正确的。 Enum s存储为int s,您的示例将表示为0,1,2。但是,您不应该依赖于此,并且总是通过它们的指定名称引用它们,以防某人覆盖默认值。

5

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

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

enum Foo : short 
{ 
    Bar, 
    Baz 
} 

虽然这通常是没有必要的。

2

默认情况下是:

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

enum关键字来声明一个枚举,一个独特的类型 由一组命名的常量称为枚举列表中。 每个枚举类型都有一个基础类型,它可以是除char之外的任何 整数类型。枚举元素的默认基础类型是int。默认情况下,第一个枚举具有 值0,并且每个连续枚举的值增加1。

1

每个枚举类型都有一个基础类型,它可以是除char之外的任何整型。 是的,默认情况下你的枚举表示为0,1,2,它是定义枚举的最轻的方法

通过定义初始值作为你的需求并明确地为每个枚举赋值整数值成员以及

1

有关的基础类型的点早已覆盖的,所以我会添加不同的背景:,不存在枚举的情况下

在IL /运行水平。它们只存在:

一个:给编译器 B:到运行时作为装箱值 C:在元数据(参数/字段/变量声明)

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

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

将具有相同的IL(除了变量类型,也许)。

变得有趣起来的唯一情况是,如果发射暗箱操作,或类似的ToString(通话)等

所以说:只要你不盒子里(把它们存储在一个object场/等等),那么在运行时,枚举或整数在存储或性能方面没有显着差异(除非使用.ToString()等)