我跟着这个Q&答:Dynamic enum in C#并且运行良好,最佳答案包含此msdn article: EnumBuilder Class
的代码此动态枚举代码生成适用于DLL中的一个枚举。问题是当我尝试添加第二个枚举它不起作用时,我只能从引用的DLL访问第一个枚举“高程”。
如何向DLL中添加两个或多个枚举?
class Example
{
public static void Main()
{
// Get the current application domain for the current thread.
AppDomain currentDomain = AppDomain.CurrentDomain;
// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(
aName, AssemblyBuilderAccess.RunAndSave);
// Define a dynamic module in "TempAssembly" assembly. For a single-
// module assembly, the module has the same name as the assembly.
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
// Define a public enumeration with the name "Elevation" and an
// underlying type of Integer.
EnumBuilder eb = mb.DefineEnum("Elevation", TypeAttributes.Public, typeof(int));
// Define two members, "High" and "Low".
eb.DefineLiteral("Low", 0);
eb.DefineLiteral("High", 1);
// Create the type and save the assembly.
Type finished = eb.CreateType();
//-------------------------------------
//HERE IS THE CODE TO CREATE A 2ND ENUM
//-------------------------------------
EnumBuilder eb1 = mb.DefineEnum("SecondEnum", TypeAttributes.Public, typeof(int));
eb1.DefineLiteral("Bad", 0);
eb1.DefineLiteral("Good", 1);
Type SecondEnum = eb1.CreateType();
ab.Save(aName.Name + ".dll");
}
}
答案 0 :(得分:1)
在工作中发生了奇怪的事情,因为我可以在家里做。在另一个项目中参考TempAsAsmbly,我可以访问SecondEnum
:
using ProjectName;
...
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(SecondEnum.Good.ToString());
}
<强>更新强>
原来我添加了两个值(数字),而不是键和值。
SecondEnum.DefineLiteral("Must Be Alphanumeric", Convert.ToInt32(dr[0].ToString()));
更新2:
确保Enum不以空格开始!!