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 :
<code class="language-csharp">public string GetDomainName<T>()</code>
Méthode interne :
Utilisez typeof(T).GetCustomAttributes
pour récupérer des propriétés personnalisées :
<code class="language-csharp"> var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute;</code>
Si l'attribut existe, retournez sa valeur :
<code class="language-csharp"> if (dnAttribute != null) { return dnAttribute.Name; }</code>
Sinon, renvoie null :
<code class="language-csharp"> return null;</code>
Pour une applicabilité plus large, généralisez cette méthode pour gérer n'importe quel attribut :
<code class="language-csharp">public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute }</code>
Méthode d'extension interne :
Récupérer les attributs personnalisés :
<code class="language-csharp"> var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute;</code>
Si l'attribut existe, utilisez le valueSelector
fourni pour extraire la valeur requise :
<code class="language-csharp"> if (att != null) { return valueSelector(att); }</code>
Sinon, renvoie la valeur par défaut du type :
<code class="language-csharp"> return default(TValue);</code>
MyClass
de DomainName
: <code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
MyClass
à l'aide des méthodes d'extension : <code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue<DomainNameAttribute, string>((DomainNameAttribute dna) => dna.Name);</code>
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!