枚举类型在c#中存储为整型吗?
本文关键字:整型 存储 类型 枚举 | 更新日期: 2023-09-27 18:03:21
枚举类型在c#中存储为整型吗?
下面的枚举是否表示为0、1、2?
如果不是,定义enum最简单的方法是什么?
public enum ColumnType
{
INT,STRING,OBJECT
}
来自MSDN
枚举元素的默认底层类型是int。
默认情况下,第一个枚举数的值为0,每个后续枚举数的值加1。
所以你的假设是正确的。Enum
s存储为int
s,您的示例将表示为0,1,2。但是,您不应该依赖于此,并且总是通过指定的名称来引用,以防有人覆盖默认值。
默认将enum
存储为int
。
你也可以指定底层类型,例如:
enum Foo : short
{
Bar,
Baz
}
默认是:
http://msdn.microsoft.com/en-us/library/sbbt4032 (v = vs.80) . aspx
enum关键字用于声明枚举,这是一种不同的类型由称为枚举器列表的一组命名常量组成。每个枚举类型都有一个基础类型,可以是any除char以外的整型。类的默认基础类型枚举元素为整型。默认情况下,第一个枚举数具有值为0时,每个后续枚举数的值增加1 .
enum
的默认底层类型是int
,但可以显式地使用不同的类型。例如,您可以使用byte
:
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
每个枚举类型都有一个底层类型,该底层类型可以是除char以外的任何整型。是的,你的enum默认表示为0,1,2,这是定义enum最简单的方式
如何定义enum,定义起始值作为您的要求,并显式地为每个枚举成员分配整型值
关于底层类型的要点已经很好地介绍了,所以我将添加一个不同的上下文:
在IL/runtime级别,枚举的实例不存在。它们只存在:
a:指向编译器B:将运行时作为盒装值C: in metadata(参数/字段/变量声明)
在其他所有时间,它们都是纯整型值(最常见的是int
)。编译器使用枚举变量(等)进行静态分析,重载解析等,但它发出的操作码与它为常量/文字整数值发出的操作码相同;例如
SomeEnum foo = SomeEnum.WithValueOne;
int bar = 1;
将具有相同的IL(可能除了变量类型)。
唯一有趣的地方是发出一个方框操作,或者像。tostring()这样的调用。
所以:只要你不装箱(将它们存储在object
字段/等),那么(在运行时)在存储或性能方面(除非你使用。tostring()等),枚举或整数之间没有显着差异