【问题标题】:c# How to get enum from custom attribute? [duplicate]c#如何从自定义属性中获取枚举? [复制]
【发布时间】:2018-02-06 21:28:07
【问题描述】:

这是我的枚举

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 的枚举?例如来自属性货币?

【问题讨论】:

  • 我不认为这是列出的问题的重复。我相信他在询问如何将诸如“CHF”之类的货币值解析为CountryCode.CH,这类似于stackoverflow.com/questions/1033260/…,但具有自定义属性。

标签: c# reflection enums attributes


【解决方案1】:

需要从枚举类型中获取:

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

【讨论】:

    【解决方案2】:

    还有另一种使用泛型的方法:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2011-02-16
      • 2020-07-19
      • 2016-07-07
      • 2017-06-04
      相关资源
      最近更新 更多