【问题标题】:Require custom enum attribute if enum type has a different custom attribute如果枚举类型具有不同的自定义属性,则需要自定义枚举属性
【发布时间】:2017-04-02 21:00:38
【问题描述】:

标题总结了它。假设我定义了一个自定义属性 IsModule。它用于我用来加载所有模块的枚举类型。

即 assembly.GetCustomAttributes(typeof(IsModule), true)

一旦我拥有所有具有该属性的枚举,我会迭代每个枚举并读取不同的自定义属性 ModuleData,以便我可以将其插入数据库。

如果类型上存在 IsModule 属性,我想要做的是通过要求每个枚举值的 ModuleData 属性来证明未来的开发人员。

【问题讨论】:

    标签: c# .net custom-attributes


    【解决方案1】:

    您可以使用称为模块初始化程序(或模块构造函数)的东西来扫描您的模块以查找与描述的条件匹配的枚举并抛出一些异常。

    问题是虽然 IL 支持它,但 c# 本身不支持,所以你需要一些“帮助”:)

    可以在这里找到一种可能的实现方式:

    https://github.com/fody/moduleinit

    【讨论】:

      【解决方案2】:

      没有即时的语言功能可以提供帮助。但是,这里有三个替代选项:

      1. 制作一个 Visual Studio(或 ReSharper)插件,在编辑过程中检查这一点;
      2. 制定一个 FXCop 规则,在运行静态代码分析时进行检查;
      3. 进行单元测试,枚举所有程序集并进行检查。

      请注意,如果是单元测试(选项 3),您需要以确保加载程序的所有程序集的方式运行它。

      【讨论】:

      • #1 我的兴趣达到了顶峰。我可以为开发人员编写一个完整的执行库。以前从未这样做过,您有很好的入门资源吗?
      • 我的错。我的意思是 VS 扩展,甚至是 ReSharper。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2020-07-19
      • 2016-12-11
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多