如何强制代码库中所有枚举必须显式指定Int值?
强制枚举显式赋值的需求与实现方案
我需要强制代码库中的所有枚举都必须分配显式值。原因是很多枚举的Int值会被存储在数据库、文件或队列这类持久化介质中,如果在现有枚举值中间新增条目,会打乱后续值的顺序,引发严重的兼容性问题。
我考虑过几种实现方式:
- 单元测试:不可行,因为反射API无法区分枚举值是隐式还是显式赋值的
- Verify快照测试:通过反射把枚举值显式列在测试文件里,新增枚举或枚举值时测试会失败,直到手动批准变更。但这种方式略显繁琐
- Roslyn分析器:可以给开发人员提供实时的代码检查反馈,是更理想的方案
反例(隐式赋值枚举)
public enum ImplictValuedEnum { Zero, One, Two, Three }
正例(显式赋值枚举)
public enum ExplictValuedEnum { Zero = 0, One = 1, Two = 2, Three = 3 }
内容的提问来源于stack exchange,提问作者Will D
相关产品推荐
相关产品推荐

