gpt4 book ai didi

.net - 为什么要为枚举声明数值?

转载 作者:行者123 更新时间:2023-12-01 07:08:06 25 4
gpt4 key购买 nike

我经常看到像这样声明的简单(非标志)枚举:

enum Something
{
Thingy = 1,
Thangamijig = 2,
Whatsit = 3
}

为什么包括可选的数值?这被认为是最佳实践吗?

MSDN guidelines for enum design似乎没有解释这样做的原因。

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

这似乎很有道理。还有其他原因吗?

最佳答案

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

如果没有明确分配,它们将在编译时按顺序设置。

例如:

enum Something
{
Thingy,
Thangamijig,
Whatsit
}

所以 Thingy == 0 , Thanamijig == 1 , Whatsit == 2
这个枚举被使用并保存到数据库中一段时间​​,然后其他一些开发人员发现了 Something 的新用途。并改变它......很糟糕:
enum Something
{
Whosits,
Thingy,
Thangamijig,
Whatsit
}

现在 Thingy == 1 , Thanamijig == 2 , Whatsit == 3并且您不再拥有正确的映射。

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

enum definition on 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 开始。

关于.net - 为什么要为枚举声明数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com