我需要创建一个动态枚举,然后能够使用 Type.GetType() 获取类型。这可能吗?
下面的代码将创建一个动态枚举,并尝试使用它的限定名称。如果我首先存储程序集(使用 AssemblyBuilderAccess.RunAndSave),这很好。但是,如果我只使用 AssemblyBuilderAccess.Run,这是不可能的;发生 BindingFailure 错误;无法找到程序集。我的印象是,运行选项将允许创建和使用,而无需实际存储程序集(或访问不同的构建器)。
(注意:下面的 Type.GetType() 代码用法不是我的。我无法更改该代码。)
如何在不存储程序集的情况下创建动态枚举并引用它?
private Type CreateType()
{
// Define the assembly.
System.Reflection.Emit.AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new System.Reflection.AssemblyName("temporaryAssembly"), AssemblyBuilderAccess.Run);
// Actually create it.
System.Reflection.Emit.ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("temporaryAssembly");
// Create the enum.
System.Reflection.Emit.EnumBuilder enumBuilder = moduleBuilder.DefineEnum("Temp", System.Reflection.TypeAttributes.Public, typeof(int));
/* Populate the enum. */
return enumBuilder.CreateType();
}
private void DoStuff()
{
Type t = CreateType();
Type createAnotherOfSameType = Type.GetType(t.AssemblyQualifiedName);
}/