2016-04-05 1 views
0

J'ai Enum et tous ont un attribut personnalisé. Donc, je veux la valeur Enum grâce à l'attribut personnalisé fourni.Récupère la valeur ENUM à partir de l'attribut personnalisé

ENUM

public enum Language 
    { 
     [StringValue("af")] 
     Afrikaans, 
     [StringValue("sq")] 
     Albanian, 
     [StringValue("ar")] 
     Arabic, 
     [StringValue("be")] 
     Belarusian, 
     [StringValue("bg")] 
     Bulgarian, 
     [StringValue("ca")] 
     Catalan 
} 

je tente de mettre en œuvre ce code, mais je suis erreur "« Type » ne contient pas une définition pour « GetTypeInfo » et aucune méthode d'extension « GetTypeInfo » accepter un premier argument de type 'type' n'a pu être trouvée (vous manque une directive à l'aide ou une référence d'assemblage?) "

using System.Reflection; 

public static T GetAttribute<T>(this Enum enumValue) 
     where T : Attribute 
    { 
     return enumValue 
      .GetType() 
      .GetTypeInfo() 
      .GetDeclaredField(enumValue.ToString()) 
      .GetCustomAttribute<T>(); 
    } 
+0

vous voulez une valeur d'attribut contre l'entrée de valeur ENUM? –

+1

jetez un oeil à ceci: http://stackoverflow.com/questions/36208281/enum-to-list-as-an-extension/36209063#36209063 –

Répondre

0

peut-être quelque chose comme ceci:

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

(écrit de mon téléphone ne peut donc pas tester, peut donc être quelques typoes etc.)

0

Essayez cet exemple:

`public enum Langue { [LangValue (Lang.af)] Afrikaans, [LangValue (Lang.sq)] albanais, [LangValue (Lang.ar)] arabe, [LangValue (Lang.be)] biélorusse, [LangValue (L ang.bg)] bulgare, [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; } 
} 
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; 
    } 
}`