根据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)
为什么这被认为是不好的做法?
因为这些值可能会随着时间而改变。假设您将一个属性设置为(使用您的示例)DrawOrder.Highest并将其存储在数据库/文档/其他数据接收器中。
时间流逝。
代码更改。
您的DrawOrder枚举已获得更多值,并且持久数据中的值现在不再等于DrawOrder.Highest。它仅等于DrawOrder.Highest数据持久化时映射到的内容。
您认为这种情况有可能引发问题吗?