我有Enum,并且都有自定义属性。所以,我希望通过提供的自定义属性获得枚举值。
ENUM
public enum Language
{
[StringValue("af")]
Afrikaans,
[StringValue("sq")]
Albanian,
[StringValue("ar")]
Arabic,
[StringValue("be")]
Belarusian,
[StringValue("bg")]
Bulgarian,
[StringValue("ca")]
Catalan
}
我尝试实现此代码,但我收到了错误" ' Type'不包含' GetTypeInfo'的定义并没有扩展方法' GetTypeInfo'接受类型'类型'的第一个参数。可以找到(你错过了使用指令或汇编引用吗?)"
using System.Reflection;
public static T GetAttribute<T>(this Enum enumValue)
where T : Attribute
{
return enumValue
.GetType()
.GetTypeInfo()
.GetDeclaredField(enumValue.ToString())
.GetCustomAttribute<T>();
}
答案 0 :(得分: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();
}
(从我的手机写,所以不能测试,所以可能是一些错字等。)
答案 1 :(得分:0)
试试这个例子:
public enum Language
{
[LangValue(Lang.af)]
Afrikaans,
[LangValue(Lang.sq)]
Albanian,
[LangValue(Lang.ar)]
Arabic,
[LangValue(Lang.be)]
Belarusian,
[LangValue(Lang.bg)]
Bulgarian,
[LangValue(Lang.ca)]
Catalan,
}
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; }
}
要从Lang
获取Language
,反之亦然:
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;
}
}