我有一组表示状态的值(ON,OFF,READY,...)。这些值也作为int字段存储在DB中,所以我想知道最佳实践是否会说这是一个枚举或只是一类const int类型。
Enum似乎非常适合人类阅读/编码,但它似乎隐藏了这样一个事实:值映射到哪个整数(或者从DB检索的值将被实例化为不正确的状态)。有人可能会稍后进入并为枚举或其他东西添加新值并抛弃整个事物。
哪种方法更好?
答案 0 :(得分:10)
我认为enum
仍然是可读性的最佳选择。但是,由于其值存储在DB中,因此应明确指定值:
enum State { On = 1, Off = 2, Ready = 3};
答案 1 :(得分:3)
有人添加新的枚举值与新的常量int有什么不同?
请记住,您可以将枚举设置为特定的整数值。
拥抱可读性!
作为额外的奖励,您现在可以使用强类型来防止像
这样的恶作剧Widget.state = 474;
其中474与数据库中的状态不对应。
答案 2 :(得分:1)
我会使用枚举,并确保记录枚举对应的表格。
一堆const int的危险在于,该类型没有表明有效值是什么,有人可以很容易地分配任何旧值。你的代码的恶意用户仍然可以通过演员来做到这一点,但是你不能阻止一些人用自己的脚射击自己...
答案 3 :(得分:1)
如果您的值很少会发生变化,或者编辑和重新编译代码没有问题,那么请确保使用枚举,并明确声明每个值的整数值。否则,我会创建一个从数据库中提取值的对象包装器(如果您担心性能,可以随时缓存值)。然后与该对象包装器进行所有比较。除非你能确保数据库中的值不会改变而不使用代码中的枚举更新代码只是易变且有风险。如果你真的喜欢冒险并且想要发布代码,你可以做一些相当酷的事情。
答案 4 :(得分:0)
您也可以自己确定Enum中的值,即:
enum STATE {ON=2, OFF=9, READY=14};
答案 5 :(得分:0)
我会说Enums。它们为您提供了人类可读格式的机器格式选项。确保以这种方式记录得很好
///Summary
/// About State Enum
///Summary
enum State : int
{
///Summary
/// About Off Enum Value
///Summary
Off = 0,
///Summary
/// About On Enum Value
///Summary
On,
///Summary
/// About Ready Enum Value
///Summary
Ready
};
无需为每个成员分配价值。从0开始,休息将自动增加。
由于你的枚举是开/关的,你可以使用布尔方式使用它。 0代表False或off,1代表true或on。
您也可以将您的枚举转换为int,如
int value = (int)State.On; // value will have 1
将数据库中的值保存为int。检索时你可以这样做
State st = (State)int.Parse(mydatabasevalue);