const int而不是enum的列表

Tel*_*ian 8 c# enums design-patterns

我开始研究一个大的c#代码库,发现使用了一个带有几个const int字段的静态类.这个类的行为与枚举完全相同.

我想把这个类转换成一个实际的枚举,但权力说不.我想转换它的主要原因是我可以将枚举作为数据类型而不是int.这对可读性有很大帮助.

是否有任何理由不使用枚举并使用const int代替?目前这是代码的方式:

public int FieldA { get; set; }
public int FieldB { get; set; }

public static class Ids
{
    public const int ItemA = 1;
    public const int ItemB = 2;
    public const int ItemC = 3;
    public const int ItemD = 4;
    public const int ItemE = 5;
    public const int ItemF = 6;
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为应该是以下内容:

public Ids FieldA { get; set; }
public Ids FieldB { get; set; }
Run Code Online (Sandbox Code Playgroud)

LBu*_*kin 6

我认为这里的许多答案都忽略了语义的含义enums.

  • 当预先知道所有有效值(Ids)的整个集合并且小到足以在程序代码中声明时,您应该考虑使用枚举.

  • 当已知值是所有可能值的子集时,您应该考虑使用int - 并且代码只需要知道此子集.

关于重构 - 当时间和业务约束允许时,当新设计/实现比先前实现具有明显优势并且风险得到充分理解时,清理代码是个好主意.在利益低或风险高(或两者兼有)的情况下,采取"不伤害" 而非"持续改进"的立场可能更好.只有您能够判断哪种情况适用于您的情况.

顺便说一句,这里的情况下,既不枚举常量整数必然是一个好主意,当这些ID代表的外部存储(如数据库)的记录的标识符.在程序逻辑中对这些ID进行硬编码通常是有风险的,因为这些值在不同的环境中实际上可能是不同的(例如,测试,开发,生产等).在这种情况下,在运行时加载值可能是更合适的解决方案.