繁体   English   中英

C#Enum或int常量

[英]C# Enum or int constants

我有一组表示状态的值(ON,OFF,READY,......)。 这些值也作为int字段存储在DB中,所以我想知道最佳实践是否会说这是一个枚举或只是一类const int类型。

Enum似乎很适合人类阅读/编码,但它似乎隐藏了这样一个事实,即值映射到哪个整数(或者从DB检索的值将被实例化为不正确的状态)。 有人可能会稍后进入并为枚举或其他东西添加新值并抛弃整个事物。

哪种方法更好?

我认为enum仍然是可读性的最佳选择。 但是,由于其值存储在DB中,因此应明确指定值:

enum State { On = 1, Off = 2, Ready = 3};

有人添加新的枚举值与新的常量int有什么不同?

请记住,您可以将枚举设置为特定的整数值。

拥抱可读性!

作为额外的奖励,您现在可以使用强类型来防止恶作剧

Widget.state = 474;

474与数据库中的状态不对应。

我会使用枚举,并确保它已经很好地记录了枚举对应的表。

一堆const int的危险在于,类型没有表明有效值是什么,有人可以很容易地分配任何旧值。 你的代码的恶意用户仍然可以通过演员来做到这一点,但是你不能阻止一些人用自己的脚射击自己......

如果您的值很少会发生变化,或者编辑和重新编译代码没有问题,那么请确保使用枚举,并明确声明每个值的整数值。 否则,我会创建一个从数据库中提取值的对象包装器(如果您担心性能,可以随时缓存值)。 然后与该对象包装器进行所有比较。 除非你能确保数据库中的值不会改变而不使用代码中的枚举更新代码只是易变且有风险。 如果你真的很冒险并且想要发布代码,你可以做一些相当酷的事情。

您也可以自己确定Enum中的值,即:

enum STATE {ON=2, OFF=9, READY=14};

我会说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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM