从属性创建枚举

时间:2011-11-11 13:17:34

标签: c# reflection enums

我正在使用自己的实体属性标记我的枚举,用于将枚举映射到案例管理系统中的相应字段。

从枚举值中获取正确的字符串工作正常,但如何从字符串生成枚举?

我开始这样做:

foreach (var fieldInfo in enumType.GetFields())
{
    var attribute = (EntityNameAttribute)fieldInfo
        .GetCustomAttributes(typeof (EntityNameAttribute), false)
        .FirstOrDefault();

    if (attribute == null)
        continue;

    if (attribute.Name != name)
        continue;

    //got a match. But now what?
}

但是如何从一个字段中获得正确的值?我可以使用fieldInfo.GetValue吗?如果是这样,我应该使用什么实例?枚举应该被视为静态类型吗?

2 个答案:

答案 0 :(得分:5)

是的,您可以使用:

object value = fieldInfo.GetValue(null);

它们只是静态只读字段,有效。请注意,从字符串中获取枚举...但如果执行需要这样做,则可以使用Enum.Parse

有一点需要注意 - 如果您使用的是.NET 3.5,则可以使用LINQ简化整个代码:

var values = from field in enumType.GetFields()
             from EntityNameAttribute attribute in 
                   field.GetCustomAttributes((typeof(EntityNameAttribute), false)
             where attribute.Name == name
             select field.GetValue(null);

(假设如果 定义了正确类型的多个属性,则不关心哪个属性具有正确的名称,并且只有一个具有正确的名字。)

答案 1 :(得分:1)

是的,它可以被视为静态类型:

string enumString = fieldInfo.GetValue(null).ToString();

将起作用