Lire dynamiquement les valeurs d'attribut au moment de l'exécution
Dans le développement de logiciels, vous rencontrez souvent des situations où vous devez accéder dynamiquement aux propriétés associées à une classe ou à un objet. Cette fonctionnalité est essentielle pour divers scénarios tels que la réflexion, la récupération de configuration et la génération de code dynamique.
Cet article explique comment implémenter la récupération d'attributs dynamiques en C#, en démontrant deux méthodes différentes :
1. Méthodes personnalisées pour des types d'attributs spécifiques :
Pour lire la valeur d'attribut d'un type d'attribut spécifique, tel que l'attribut DomainName
, vous pouvez définir une méthode personnalisée comme celle-ci :
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }</code>
2. Méthodes d'extension génériques pour tout type de propriété :
Pour rendre le processus de récupération de propriété général et prendre en charge tout type de propriété, vous pouvez créer la méthode d'extension générique suivante :
<code class="language-csharp">public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute { var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute; if (att != null) { return valueSelector(att); } return default(TValue); } }</code>
Utilisation :
Les deux méthodes vous permettent d'obtenir la valeur de l'attribut DomainName
au moment de l'exécution, comme ceci :
<code class="language-csharp">// 使用自定义方法 string domainNameValue = GetDomainName<MyClass>(); // 使用扩展方法 string name = typeof(MyClass) .GetAttributeValue((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!