从数据库动态生成enum类(示例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public TypeInfo GetBusinessUnitEnum()
{
    // Create a dynamic assembly in the current application domain,
    // and allow it to be executed and saved to disk.
    AssemblyName assemblyName = new AssemblyName( nameof(CBOP.Service.Advertising));
    AssemblyBuilder assBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndCollect);
 
    // Define a dynamic module in "TempAssembly" assembly. For a single-
    // module assembly, the module has the same name as the assembly.
    ModuleBuilder mb = assBuilder.DefineDynamicModule(nameof(CBOP.Service.Advertising));
 
    // Define a public enumeration with the name "Elevation" and an
    // underlying type of Integer.
    EnumBuilder eb = mb.DefineEnum(nameof(CBOP.Service.Advertising)+"BusinessUnitEnum", TypeAttributes.Public, typeof(int));
 
    var targetEnum=_enumConfigRep.Where(_ => _.EnumType == _businessUnitIdForET);
    // Define two members, "High" and "Low".
    foreach (var item in targetEnum)
    {
        eb.DefineLiteral(item.EnumValue,item.EnumId);
    }
    // Create the type and save the assembly.
    var finished = eb.CreateTypeInfo();
    WriteEnum(finished);
    return finished;
}
 
private void WriteEnum(TypeInfo info)
{
    var myEnum = Activator.CreateInstance(info);
    _loger.Info($"{(info.IsPublic ? "public" : "private")} {(info.IsEnum ? "enum" : "class")} {info.Name}");
    _loger.Info("{");
    var names = Enum.GetNames(info);
    int[] values = (int[])Enum.GetValues(info);
    int i = 0;
    foreach (var item in names)
    {
        _loger.Info($" {item} = {values[i]}");
        i++;
    }
    _loger.Info("}");
}

  

参考:

C# 反射与特性(十):EMIT 构建代码

EnumBuilder Class

posted @   PanPan003  阅读(936)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
历史上的今天:
2019-11-06 Sass(Syntactically Awesome Stylesheets)——概述(待续)
2019-11-06 Sass(Syntactically Awesome Stylesheets)——使用React JS实现
2019-11-06 Yarn概述——FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT
2019-11-06 webpack——Modules && Hot Module Replacement
2019-11-06 webpack概述——资源、样式、图片的打包工具
2019-11-06 MERN——MongoDB && React && Node && Express
2019-11-06 React调试——visual studio code
点击右上角即可分享
微信分享提示