Enum vs Constants / Class with Static Members?

时间:2011-05-13 22:38:51

标签: c# enums

我有一组特定于应用程序的代码(代码与其名称的一对一映射),并且我一直在使用C#中的枚举来表示它们。我现在不确定是否有必要。值永远不会改变,它们总是与这些标签相关联:

Workflow_Status_Complete = 1
Workflow_Status_Stalled = 2
Workflow_Status_Progress = 3
Workflow_Status_Complete = 4
Workflow_Status_Fail = 5

我应该使用带有静态成员的枚举或类吗?

4 个答案:

答案 0 :(得分:11)

int类型的静态成员似乎不如我的枚举。你失去了枚举的类型安全。在调试时,您看不到符号名称,只看到一个数字。

另一方面,如果一个条目不仅仅包含一个名称/整数值对,那么一个类可能是一个好主意。但是那些字段应该属于那个类,而不是int。类似的东西:

class MyFakeEnum
{
   public static readonly MyFakeEnum Value1=new MyFakeEnum(...);
}

答案 1 :(得分:2)

使用枚举。即使您的代码永远不会改变,但通过检查很难知道该值代表什么。使用枚举的众多优势之一。

enum RealEnum : uint
{
    SomeValue = 0xDEADBEEF,
}
static class FakeEnum
{
    public const uint SomeValue = 0xDEADBEEF;
}

var x = RealEnum.SomeValue;
var y = FakeEnum.SomeValue;
// what's the value?
var xstr = x.ToString(); // SomeValue
var ystr = y.ToString(); // 3735928559

在这里,调试器甚至都没有帮助,特别是如果有许多不同的值。

答案 2 :(得分:1)

查看State Pattern,因为这是一个更好的设计。根据你使用的想法,你最终会得到一个很大的开关/ if-else语句,这很难跟上。

答案 3 :(得分:0)

我会倾向于枚举,因为它们提供了更多信息,它们使您的代码“更容易正确使用且难以正确使用”。 (我认为引用来自实用程序员。