2011-11-11 197 views
2

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

从枚举值获取正确的字符串工作正常,但我怎么能从一个字符串生成枚举?

我开始这样做:

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吗?如果是这样,我应该使用什么样的实例?应该将枚举视为静态类型吗?

+0

不明白你的意思*“生成字符串的枚举”*。你的意思是说''红色=> Color.Red'有任何机会吗? –

+0

@MunimAbdul:在另一个系统中,一个状态可以被命名为“01 - Planning”,这意味着我在我的枚举中获得了'[EntityName(“01 - Planning”)] Planning = 1,'作为一个字段。 – jgauffin

回答

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); 

(这是假设,如果有定义了正确类型的多个属性,你不在乎哪一个具有正确的名称,只有一个有正确的名称)

+0

doh!我现在感觉很傻.. – jgauffin

+0

@jgauffin:根本不需要感到愚蠢。完全合理的问题:) –

+0

+1写下了我想要的......只是以更简洁,翔实和优雅的方式。 –

1

是的,它可以被当作一个静态类型:

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

将工作