2012-04-13 45 views
0

我有自定義屬性,像一個枚舉:如何反向解析自定義屬性?

public enum EnumStatus 
{ 
    [CharValue('*')] 
    Empty, 

    [CharValue('A')] 
    value1, 

    [CharValue('P')] 
    value2, 
} 

「前進」的方式似乎很容易,有越來越 使用反射,GetCustomAttributes並像自定義屬性的枚舉值到來。

但我想要某種反向解析。 有一個char值,我想有一個枚舉值來處理。

類似:

public static Enum GetEnumValue(this Enum source, char value) 
{...} 

應返回EnumStatus.value1,如果我把一個 'A' 的值參數。

有什麼想法?我不想製作額外的散列表,推遲枚舉。

非常感謝你!

回答

1

從例如我做了這個位置:

public static T GetEnumValue<T, TExpected>(char value) where TExpected : Attribute 
    { 
     var type = typeof(T); 

     if (type.IsEnum) 
     { 
      foreach (var field in type.GetFields()) 
      { 
       dynamic attribute = Attribute.GetCustomAttribute(field, 
        typeof(TExpected)) as TExpected; 

       if (attribute != null) 
       { 
        if (attribute.Value == value) 
        { 
         return (T)field.GetValue(null); 
        } 
       } 
      } 
     } 

     return default(T); 
    } 

的偉大工程......

0

我推薦使用DescriptionAttribute並按照這裏的示例:https://stackoverflow.com/a/4367868/905651

+0

非常感謝您! 「默認」描述屬性已被使用。所以我需要另一種方式。但也許我可以用這個例子。它不需要是通用的,但我需要「通用」屬性。 – 2012-04-13 18:00:51

+0

從實施例I由此這裏: 公共靜態ŤGetEnum (char值) { 變種類型= typeof運算(T); 如果(type.IsEnum) { 的foreach(在type.GetFields()VAR字段) { var屬性= Attribute.GetCustomAttribute(場, typeof運算(CharValueAttribute))作爲CharValueAttribute; (屬性!= null) if(attribute.Value == value) return(T)field.GetValue(null); } } } return default(T); } – 2012-04-13 18:50:20