为什么要为枚举声明数值?

Igb*_*man 3 .net enums

我经常看到Simple(非Flags)枚举声明如下:

enum Something
{
    Thingy = 1,
    Thangamijig = 2,
    Whatsit = 3
}
Run Code Online (Sandbox Code Playgroud)

为什么要包含可选的数值?这被认为是最佳做法吗?

枚举设计MSDN指南似乎没有解释这样做的原因.

一个潜在的答案刚刚发生在我身上:是否要确保包含枚举实例的先前序列化对象不会变为无效或者如果要修改枚举(例如重新排序值或插入新值),其含义会发生变化?

这看起来似乎有道理.还有其他原因吗?

hun*_*ter 7

如果您要在外部保存这些值(如数据库)并希望将其值映射回代码,这一点非常重要.

如果未明确指定,则将在编译时按顺序设置它们.


例如:

enum Something
{
    Thingy,
    Thangamijig,
    Whatsit
}
Run Code Online (Sandbox Code Playgroud)

所以Thingy == 0,Thanamijig == 1,Whatsit == 2

使用此枚举并将其保存到数据库一段时间,然后其他一些开发人员找到新的用途Something并对其进行更改......很糟糕:

enum Something
{
    Whosits,
    Thingy,
    Thangamijig,
    Whatsit
}
Run Code Online (Sandbox Code Playgroud)

现在Thingy == 1,Thanamijig == 2,Whatsit == 3你不再有正确的映射.

这只是一种未明确定义每个枚举值映射到的内容可能导致大问题的情况.


MSDN上的枚举定义

枚举元素的默认基础类型是int.默认情况下,第一个枚举数的值为0,每个连续的枚举数的值增加1.例如:

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

在此枚举中,Sat为0,Sun为1,Mon为2,依此类推.枚举器可以使用初始值设定项来覆盖默认值.例如:

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

在此枚举中,元素序列被强制从1而不是0开始.