zoukankan      html  css  js  c++  java
  • 从数据库动态生成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

  • 相关阅读:
    吉哥系列故事――恨7不成妻
    K
    F
    树状数组
    34.在排序数组中查找元素的第一个和最后一个位置--二分查找
    CSS选择器及其权重
    CSS布局 圣杯和双飞翼
    983. 最低票价 -- 动态规划
    合并k个排序链表 二分
    面试题 16.03. 交点
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/13937920.html
Copyright © 2011-2022 走看看