2016-04-05 155 views
0

我有枚舉,並且都有自定義屬性。所以,我想通過提供的自定義屬性枚舉值。從自定義屬性獲取ENUM值

ENUM

public enum Language 
    { 
     [StringValue("af")] 
     Afrikaans, 
     [StringValue("sq")] 
     Albanian, 
     [StringValue("ar")] 
     Arabic, 
     [StringValue("be")] 
     Belarusian, 
     [StringValue("bg")] 
     Bulgarian, 
     [StringValue("ca")] 
     Catalan 
} 

我嘗試實現這個代碼,但我得到了錯誤「‘類型’不包含‘GetTypeInfo的’的定義,並沒有擴展方法‘GetTypeInfo的’接受的第一個參數類型「類型」可以找到(是否缺少using指令或程序集引用?)

using System.Reflection; 

public static T GetAttribute<T>(this Enum enumValue) 
     where T : Attribute 
    { 
     return enumValue 
      .GetType() 
      .GetTypeInfo() 
      .GetDeclaredField(enumValue.ToString()) 
      .GetCustomAttribute<T>(); 
    } 
+0

你想要的屬性對枚舉值輸入值? –

+1

看看這個:http://stackoverflow.com/questions/36208281/enum-to-list-as-an-extension/36209063#36209063 –

回答

0

也許是這樣的:

public static T GetAttribute<T>(Enum enumValue) where T: Attribute 
{ 
    var member = enumValue.GetType().GetMember(enumValue.ToString()).FirstOrDefault(); 
    return (T) member?.GetCustomAttributes(typeof (T), false).FirstOrDefault(); 
} 

(從我的電話寫了這麼無法測試,所以可以將一些typoes等)

0

試試這個例子:

'公共枚舉語言 { [LangValue(Lang.af)] 南非荷蘭語, [LangValue(Lang.sq)] 阿爾巴尼亞人, [LangValue(Lang.ar)] 阿拉伯語, [LangValue(Lang.be)] 白俄羅斯語, [LangValue(L ang.bg) 保加利亞, [LangValue(Lang.ca) 加泰羅尼亞語, }

public enum Lang 
{ 
    [LanguageValue(Language.Afrikaans)] 
    af, 
    [LanguageValue(Language.Albanian)] 
    sq, 
    [LanguageValue(Language.Arabic)] 
    ar, 
    [LanguageValue(Language.Belarusian)] 
    be, 
    [LanguageValue(Language.Bulgarian)] 
    bg, 
    [LanguageValue(Language.Catalan)] 
    ca, 
} 
public class LanguageValue : Attribute 
{ 
    public LanguageValue(Language e) 
    { 
     _LanguageValue = e; 
    } 
    public Language _LanguageValue { get; set; } 
} 
public class LangValue : Attribute 
{ 
    public LangValue(Lang e) 
    { 
     _LangValue = e; 
    } 
    public Lang _LangValue { get; set; } 
} 
public static class ExtensionsMethods 
{ 
    public static Lang GetLang(this Language la) 
    { 
     var l = la.GetType().GetField(la.ToString()).GetCustomAttributes(typeof(LangValue), false).First() as LangValue; 
     return l._LangValue; 
    } 
    public static Language GetLanguage(this Lang la) 
    { 
     var l = la.GetType().GetField(la.ToString()).GetCustomAttributes(typeof(LanguageValue), false).First() as LanguageValue; 
     return l._LanguageValue; 
    } 
}`