我们正在使用准动态方法使用 t4 模板从 sql 查找表创建枚举。该模板为每个符合查找模式的表生成一个枚举。其中一些枚举没有在代码中使用,但任何一个都可以。
这很好而且很花哨,但现在我们被要求创建一个查找管理界面,以便用户可以添加新值、编辑描述等。
他们不想修改当前在代码中作为枚举值使用的任何项目,那么是否有一种简单(或不那么简单)的方法来查询我们的程序集以查明是否使用了枚举值?
我们有很多类似于这个虚构示例的代码:
public Role GetAdminRole
{
using (myContext ctx = new myContext()
{
return ctx.Roles.Where(i=> i.RoleId == (int)RoleEnum.Admin).SingleOrDefault();;
}
}
有没有办法使用 Type.FindMembers() 并构建一个可以查询方法内部的过滤器?
我查看了System.Reflection.Emit
命名空间,它基于 EnumBuilder 类似乎很有希望,但无法弄清楚如何将构建器连接到现有程序集。命名空间听起来很有趣,System.Diagnostics.CodeAnalysis
但它只包含两个属性(用于抑制警告和将代码排除在覆盖范围之外)。
编辑:在通过 ILSpy 戳时,我发现我知道但没有放在一起,方法中的枚举值在编译时以上述方式使用时会转换为它们的整数值。