2017-08-29 20 views
0

これはMyEnumc#カスタム属性からenumを取得するには?

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で列挙型を得ることができますか?ありますかたとえば通貨?あなたが列挙型からそれを取得する必要があり

+0

私はこれが記載されている質問の重複はないと思います。私は彼がhttps://stackoverflow.com/questions/1033260/how-can-i-get-an-enum-に類似する「CHF」のような通貨価値を「CountryCode.CH」に解析する方法を求めていると信じています。 value-from-its-descriptionであるが、カスタム属性を持つ。 – 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; 
} 
関連する問題