枚举类型在c#中存储为整型吗?

本文关键字:整型 存储 类型 枚举 | 更新日期: 2023-09-27 18:03:21

枚举类型在c#中存储为整型吗?

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

如果不是,定义enum最简单的方法是什么?

public enum ColumnType
{
    INT,STRING,OBJECT
}

枚举类型在c#中存储为整型吗?

来自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()等),枚举或整数之间没有显着差异