const int 列表而不是 enum

2024-05-27

我开始研究大型 C# 代码库,并发现使用带有多个 const ints 字段的静态类。这个类的行为与枚举完全一样。

我想将类转换为实际的枚举,但权力被拒绝。我想转换它的主要原因是这样我可以将枚举作为数据类型而不是 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;
}

不过,我认为应该改为以下内容:

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

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

  • 当所有有效值 (Id) 的整个集合提前已知并且小到足以在程序代码中声明时,您应该考虑使用枚举。

  • 当已知值的集合是 a 时,您应该考虑使用 intsubset所有可能的值 - 并且代码只需要知道这个子集。

关于重构 - 当时间和业务限制允许时,当新的设计/实现比以前的实现有明显的好处并且风险得到充分理解时,清理代码是个好主意。在收益低或风险高(或两者兼而有之)的情况下,采取以下立场可能会更好“不要伤害”而不是“持续改进”。只有您才能判断哪种情况适合您的情况。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

const int 列表而不是 enum 的相关文章

随机推荐