2017-08-29 78 views
0

这是MyEnumc#如何从自定义属性获取枚举?

public class CountryCodeAttr : EnumAttr 
{ 
    public string Code { get; set; } 
    public string Description { get; set; } 
} 

public enum CountryCode 
{ 
    [CountryCodeAttr(Code = "Unknown", Description = "Unknown")] 
    Unknown, 
    [CountryCodeAttr(Code = "CH", Description = "Swiss", Currency="CHF")] 
    CH 
.... 

} 

我怎样才能,获得与特定CountryCodeAttr枚举?例如从属性Currency?

+0

我不认为这是所列出的问题的副本。我相信他在问如何将货币值(如“CHF”)解析为“CountryCode.CH”,类似于https://stackoverflow.com/questions/1033260/how-can-i-get-an-enum-从描述中获取价值,但具有自定义属性。 – TylerBrinkley

回答

0

您需要从枚举类型得到它:

CountryCode value = CountryCode.CH; 
FieldInfo field = typeof(CountryCode).GetField(value.ToString()); 
var attr = field.GetCustomAttribute<CountryCodeAttr>(); 
0

有泛型做到这一点的另一种方法:

public static T GetAttribute<T>(Enum enumValue) where T: Attribute 
{ 
    T attribute; 

    MemberInfo memberInfo = enumValue.GetType().GetMember(enumValue.ToString()) 
            .FirstOrDefault(); 

    if (memberInfo != null) 
    { 
     attribute = (T) memberInfo.GetCustomAttributes(typeof (T), false).FirstOrDefault(); 
     return attribute; 
    } 
    return null; 
}