我有一组特定于应用程序的代码(代码与其名称的一对一映射),并且我一直在使用C#中的枚举来表示它们。我现在不确定是否有必要。值永远不会改变,它们总是与这些标签相关联:
Workflow_Status_Complete = 1
Workflow_Status_Stalled = 2
Workflow_Status_Progress = 3
Workflow_Status_Complete = 4
Workflow_Status_Fail = 5
我应该使用带有静态成员的枚举或类吗?
答案 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)
我会倾向于枚举,因为它们提供了更多信息,它们使您的代码“更容易正确使用且难以正确使用”。 (我认为引用来自实用程序员。