Recherche de propriétés avec des attributs spécifiques à l'aide de Reflection
Les attributs personnalisés sont un outil puissant pour annoter des types et des membres dans le code .NET. Il devient parfois nécessaire de récupérer des informations sur ces attributs par programmation. Cette question se concentre sur la récupération d'une liste de propriétés publiques attribuées à un attribut personnalisé spécifique appelé MyAttribute, dont la propriété AllowMultiple est définie sur false.
Le code fourni utilise une boucle pour parcourir les propriétés du type. et vérifie la présence de l'attribut personnalisé à l'aide de GetCustomAttributes(). Bien que cette approche soit fonctionnelle, elle implique la matérialisation d'instances d'attributs, ce qui entraîne un coût en termes de performances.
Une approche plus efficace consiste à utiliser la méthode d'extension Where() sur la collection GetProperties(), comme démontré dans le document donné. réponse :
var props = t.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(MyAttribute)));
Ce code exploite la méthode Attribute.IsDefined(), qui vérifie l'existence d'un type d'attribut spécifique sur un membre sans créer d'instances d'attribut. L'expression lambda garantit que seules les propriétés avec MyAttribute sont sélectionnées dans la variable props.
L'utilisation de cette approche évite la surcharge associée à la matérialisation des instances d'attribut, ce qui aboutit à une solution plus légère et plus performante.
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!