使用C#EnumBuilder创建带属性的枚举

时间:2012-08-29 16:52:28

标签: c# reflection enums attributes reflection.emit

我在C#中使用EnumBuilder根据数据库中的表创建枚举。但是,在我的框架设计时,我们的枚举还包含一个属性,该属性通常是与数据库中的ID相关联的名称。

我想要完成的是保持与数据库表相关的枚举更新,而不必手动更新它们,并且不会丢失它当前对属性的功能(即使它们很少使用)。

那么,是否可以构建一个包含属性的枚举?

public enum Example
{
   [StringValue("Some Name 1")]
   SomeName1 = 1,       
   [StringValue("Some Name 2")]
   SomeName2 = 2,
}

更新

使用SetCustomAttribute我可以通过将以下内容添加到创建枚举的现有代码来添加属性。

Type myType = typeof(StringValueAttribute);
ConstructorInfo ci = myType.GetConstructor(new Type[] { typeof(string) });
// Other code
FieldBuilder fb = eb.DefineLiteral(name, result.ExampleID);
var cab = new CustomAttributeBuilder(ci, new object[] { result.Name });
fb.SetCustomAttribute(cab);

1 个答案:

答案 0 :(得分:3)

我自己没有使用EnumBuilder,但其DefineLiteral方法会返回FieldBuilder,而SetCustomAttribute又会显示{{3}},我怀疑您可以使用它来定义属性该领域。