枚举类型是否存储为C#中的整数?
下面的枚举是否会表示为0,1,2?
如果没有,定义枚举最轻的方法是什么?
public enum ColumnType
{
INT,STRING,OBJECT
}
答案 0 :(得分:5)
答案 1 :(得分:5)
枚举元素的默认基础类型是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()等)