如果枚举类型具有不同的自定义属性,则需要自定义枚举属性
Require custom enum attribute if enum type has a different custom attribute
标题总结了它。假设我定义了一个自定义属性 IsModule。它用于我用来加载所有模块的枚举类型。
即 assembly.GetCustomAttributes(typeof(IsModule), true)
一旦我拥有所有具有该属性的枚举,我将迭代每个枚举并读取不同的自定义属性 ModuleData,以便我可以将其插入到数据库中。
我想做的是通过在类型上存在 IsModule 属性时要求每个枚举值上的 ModuleData 属性来证明这个未来的开发人员。
您可以使用称为模块初始值设定项(或模块构造函数)的东西来扫描您的模块以查找与描述的条件匹配的枚举并抛出一些异常。
问题是虽然 IL 支持它,但 c# 本身不支持,所以你需要一些 "help" :)
可以在此处找到一种可能的实现方式:
没有即时语言功能可以提供帮助。但是,这里有三个替代选项:
- 制作一个 Visual Studio(或 ReSharper)插件,在编辑过程中会对此进行检查;
- 制定一个 FXCop 规则,当静态代码分析为 运行;
时将进行检查
- 进行单元测试,枚举所有程序集并进行检查。
请注意,在单元测试(选项 3)的情况下,您需要 运行 以确保加载程序的所有程序集的方式。
标题总结了它。假设我定义了一个自定义属性 IsModule。它用于我用来加载所有模块的枚举类型。
即 assembly.GetCustomAttributes(typeof(IsModule), true)
一旦我拥有所有具有该属性的枚举,我将迭代每个枚举并读取不同的自定义属性 ModuleData,以便我可以将其插入到数据库中。
我想做的是通过在类型上存在 IsModule 属性时要求每个枚举值上的 ModuleData 属性来证明这个未来的开发人员。
您可以使用称为模块初始值设定项(或模块构造函数)的东西来扫描您的模块以查找与描述的条件匹配的枚举并抛出一些异常。
问题是虽然 IL 支持它,但 c# 本身不支持,所以你需要一些 "help" :)
可以在此处找到一种可能的实现方式:
没有即时语言功能可以提供帮助。但是,这里有三个替代选项:
- 制作一个 Visual Studio(或 ReSharper)插件,在编辑过程中会对此进行检查;
- 制定一个 FXCop 规则,当静态代码分析为 运行; 时将进行检查
- 进行单元测试,枚举所有程序集并进行检查。
请注意,在单元测试(选项 3)的情况下,您需要 运行 以确保加载程序的所有程序集的方式。