概述
C#通过反射动态创建Enum
/// <summary>
/// 动态创建枚举
/// </summary>
/// <param name="enumDictionary">枚举元素列表</param>
/// <param name="enumName">枚举名</param>
/// <returns>Enum枚举</returns>
public static Enum CreateEnum(Dictionary<string, int> enumDictionary, string enumName = "DefalutEnum")
{
if (enumDictionary == null || enumDictionary.Count <= 0)
return null;
AppDomain currentDomain = AppDomain.CurrentDomain;
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name);
if (string.IsNullOrEmpty(enumName))
{
enumName = "DefalutEnum";
}
EnumBuilder eb = mb.DefineEnum(enumName, TypeAttributes.Public, typeof(int));
foreach (var item in enumDictionary)
{
eb.DefineLiteral(item.Key, item.Value);
}
Type finished = eb.CreateType();
Enum eEnum = Reflection.GetDefault(finished) as Enum;
//foreach (object item in Enum.GetValues(eEnum.GetType()))
//{
// Debug.LogError(string.Format("{0}.{1} = {2}", finished, item, ((int)item)));
//}
return eEnum;
}
/// <summary>
/// 动态创建枚举
/// </summary>
/// <param name="enumDictionary">枚举元素列表</param>
/// <param name="enumName">枚举名</param>
/// <returns>Enum枚举</returns>
public static Enum CreateEnum(List<string> enumList, string enumName = "DefalutEnum")
{
if (enumList == null || enumList.Count <= 0)
return null;
AppDomain currentDomain = AppDomain.CurrentDomain;
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name);
if (string.IsNullOrEmpty(enumName))
{
enumName = "DefalutEnum";
}
EnumBuilder eb = mb.DefineEnum(enumName, TypeAttributes.Public, typeof(int));
for (int i = 0; i < enumList.Count; i++)
{
eb.DefineLiteral(enumList[i],i);
}
Type finished = eb.CreateType();
Enum eEnum = Reflection.GetDefault(finished) as Enum;
//foreach (object item in Enum.GetValues(eEnum.GetType()))
//{
// Debug.LogError(string.Format("{0}.{1} = {2}", finished, item, ((int)item)));
//}
return eEnum;
}
最后
以上就是靓丽玫瑰为你收集整理的C#通过反射动态创建Enum的全部内容,希望文章能够帮你解决C#通过反射动态创建Enum所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复