2012-06-08 291 views
2

可能重复:
Get Enum from Description attribute获取枚举值通过描述

我有一个使用的描述属性的枚举。我希望能够根据传入的字符串设置对象 - >属性值。如果字符串与枚举值描述之一匹配,那么应该选择该值。没有使用冗长的循环,我可以这样做吗?

public enum Rule 
{ 
    .... 
    [Description("New Seed")] 
    Rule2 = 2, 
    .... 
} 

什么,我希望的是像

var object = new oject{ rule = Rule.Where(r=> r.description == rulestring)} 
+1

你不能做到这一点,属性是元数据不是真实的数据(即。不是实际值)。我用我自己的'StringValueAttribute'和一些扩展方法来模拟这样的东西,但是有一些限制,你必须连接支持基础设施。 – CodingGorilla

+1

@CodingGorilla我不明白你的意思。枚举enum值,找到具有特定描述的值不应该很难。 – CodesInChaos

+0

@CodeInChaos他希望将'Description'属性作为'Rule'枚举的成员,你不能那样做。我所做的就是在'Enum'类型上使用一些扩展方法来提取属性(在我的例子中称为StringValueAttribute)元数据并返回它。这并不那么困难,这与他所要求的不同。它会变得有点棘手,因为你扩展了'Enum'类型而不是'Enum'的具体实现。 – CodingGorilla

回答

2
 Rule f; 
     var type = typeof(Rule); 
     foreach (var field in type.GetFields()) 
     { 
      var attribute = Attribute.GetCustomAttribute(field, 
       typeof(DescriptionAttribute)) as DescriptionAttribute; 
      if (attribute != null) 
      { 
       if (attribute.Description == "description"){ 
        f = (Rule)field.GetValue(null); 
       break;} 
      } 
      else 
      { 
       if (field.Name == "description"){ 
        f = (Rule)field.GetValue(null); 
       break;} 
      } 
     } 

裁判:Get Enum from Description attribute

+3

链接实际上是一个确切的副本。 – Servy

+2

是的,我只是为了方便而写在这个表格中。 –

+4

由于它是一个完全重复的线程应该相应地关闭,虽然我现在看到你没有足够的代表投票关闭。将来,如果您看到完全相同的重复内容,您可以仅通过链接发表评论,说明它是完全相同的副本,而不是将重复问题的相同答案重新发布。 – Servy