Cet article présente une méthode générale pour accéder et extraire dynamiquement les valeurs d'attribut d'une classe.
Définissez une méthode générique qui accepte les paramètres de type :
public string GetDomainName<T>()
Méthode interne :
Utilisez typeof(T).GetCustomAttributes
pour récupérer des propriétés personnalisées :
var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute;
Si l'attribut existe, retournez sa valeur :
if (dnAttribute != null) { return dnAttribute.Name; }
Sinon, renvoie null :
return null;
Pour une applicabilité plus large, généralisez cette méthode pour gérer n'importe quel attribut :
public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute }
Méthode d'extension interne :
Récupérer les attributs personnalisés :
var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute;
Si l'attribut existe, utilisez le valueSelector
fourni pour extraire la valeur requise :
if (att != null) { return valueSelector(att); }
Sinon, renvoie la valeur par défaut du type :
return default(TValue);
MyClass
de DomainName
: string name = typeof(MyClass).GetDomainName<MyClass>();
MyClass
à l'aide des méthodes d'extension : string name = typeof(MyClass) .GetAttributeValue<DomainNameAttribute, string>((DomainNameAttribute dna) => dna.Name);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!