如何避免使用枚举?

时间:2010-02-15 19:43:35

标签: c# .net vb.net enums

在这里问question之前,我从未认为(枚举)是“坏事”。对于那些认为它们不是最佳实践的人来说,有哪些方法/模式可以避免在代码中使用它们?

编辑:

public Enum SomeStatus
 Approved = 1
 Denied = 2
 Pending =3
end Enum

5 个答案:

答案 0 :(得分:26)

在Fowler的Refactoring中描述了枚举的问题,它被认为是代码异味。它与类型安全无关,而是强迫您在代码中散布switch语句,从而违反 DRY原则

State pattern是相同结构的更好模型,因为它允许您在同一个类中实现和改变与相同状态相关的逻辑。这也增加了凝聚力并减少了阶级耦合。

答案 1 :(得分:9)

我认为使用枚举是一件好事。它提供了强大的类型安全性。

它们有时会有一些缺点,但这通常与预先不知道每个可能选项的情况有关。如果您有一组固定的选项,例如您的示例,那么强类型枚举是一件好事,不应该避免。

答案 2 :(得分:6)

我喜欢海龟 class enums

答案 3 :(得分:2)

枚举的要点是仅在一个地方定义(数据库术语中的规范化)。如果这个枚举合法地是你正在写的课程的一部分,那么继续。

否则,特别是如果您发现自己多次声明,请重新考虑您的枚举内容。它实际上是否携带数据?是否有足够的值来考虑将可能性存储在数据库中?

答案 4 :(得分:1)

我喜欢在相关的值集上放置易于使用和理解的名称的枚举。我只是不喜欢c#实现。使用您的示例枚举:

SomeStatus status = 17;

这种编译和运行没有任何抱怨,即使17超出界限。

德尔福有更好的枚举(或者至少,它曾经使用过 - 自从我使用它以来已经好几年了)