为什么枚举中的位置标记(如第一个或最后一个)被视为不良做法?

Osi*_*ris 5 c# enumeration

根据System.Enum类的MSDN文档的最佳实践部分:

不要仅仅为了枚举枚举本身的状态来定义枚举值.例如,不要定义仅标记枚举结束的枚举常量.如果需要确定枚举的最后一个值,请明确检查该值.此外,如果范围内的所有值都有效,则可以对第一个和最后一个枚举常量执行范围检查.

如果我理解正确,我们不应该如下声明枚举.

public enum DrawOrder
{
    VeryBottom = 0,
    Bottom = 1,
    Middle = 2,
    Top = 3,
    Lowest = VeryBottom, //marks a position in the enum
    Highest = Top, //marks a position in the enum
}
Run Code Online (Sandbox Code Playgroud)

为什么这被认为是不好的做法?

Nic*_*rey 2

因为这些值可能会随着时间而改变。假设您将一个属性设置为(使用您的示例)DrawOrder.Highest并将其存储在数据库/文档/其他数据接收器中。

时间流逝。

代码更改。

您的DrawOrder枚举已获得更多值,并且持久数据中的值现在不再等于DrawOrder.Highest。它仅等于DrawOrder.Highest数据持久化时映射到的内容。

您认为这种情况有可能引发问题吗?