I have Enum and all have there custom attribute. So, i want Enum value through supplied custom attribute.
ENUM
public enum Language
{
[StringValue("af")]
Afrikaans,
[StringValue("sq")]
Albanian,
[StringValue("ar")]
Arabic,
[StringValue("be")]
Belarusian,
[StringValue("bg")]
Bulgarian,
[StringValue("ca")]
Catalan
}
I try to implement this code but i got error " 'Type' does not contain a definition for 'GetTypeInfo' and no extension method 'GetTypeInfo' accepting a first argument of type 'Type' could be found (are you missing a using directive or an assembly reference?) "
using System.Reflection;
public static T GetAttribute<T>(this Enum enumValue)
where T : Attribute
{
return enumValue
.GetType()
.GetTypeInfo()
.GetDeclaredField(enumValue.ToString())
.GetCustomAttribute<T>();
}
Maybe something like this:
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();
}
(Writing from my phone so cannot test, so can be some typoes etc.)
Try this example:
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; }
}
In order to get the Lang
from the Language
and vice versa:
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;
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.