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


            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

  • 相关阅读:
    [Trie][并查集]JZOJ 5822 量子纠缠
    [模拟]JZOJ 5820 非法输入
    SAM模板
    [树形DP]JZOJ 5819 大逃杀
    [MST][dij]JZOJ 5818 做运动
    [暴力]JZOJ 5817 抄代码
    [概率期望][树形DP][LCA]JZOJ 5814 树
    认证组件
    注册接口
    视图家族 & 路由组件
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/13937920.html
Copyright © 2020-2023  润新知