从数据库动态生成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("}");
}
参考:

浙公网安备 33010602011771号