Maison >développement back-end >C++ >Comment puis-je récupérer efficacement des propriétés avec des attributs personnalisés dans .NET ?

Comment puis-je récupérer efficacement des propriétés avec des attributs personnalisés dans .NET ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-27 04:42:25114parcourir

How Can I Efficiently Retrieve Properties with Custom Attributes in .NET?

Récupération de propriétés avec des attributs personnalisés : une approche efficace

Lorsque vous travaillez avec la réflexion dans .NET, il est souvent nécessaire d'introspecter les types et leurs membres pour accéder à des informations spécifiques. Un scénario courant consiste à obtenir une liste de propriétés marquées avec un attribut personnalisé particulier. Cette tâche peut être accomplie à l'aide de la méthode GetCustomAttributes(), mais il existe une méthode plus efficace et plus concise.

Considérez l'extrait de code suivant, qui vise à récupérer des propriétés avec l'attribut MyAttribute :

foreach (PropertyInfo prop in t.GetProperties())
{
    object[] attributes = prop.GetCustomAttributes(typeof(MyAttribute), true);
    if (attributes.Length == 1)
    {
         //Property with my custom attribute
    }
}

Bien que cette approche fonctionne correctement, elle souffre d'une instanciation d'objet inutile. La méthode GetCustomAttributes() renvoie un tableau d'instances d'attributs, ce qui nécessite une allocation de mémoire et une surcharge supplémentaires.

Pour optimiser ce code, nous pouvons exploiter la méthode Where() et la méthode Attribute.IsDefined(), comme démontré ci-dessous :

var props = t.GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(MyAttribute)));

Cet extrait de code révisé améliore considérablement l'efficacité en utilisant Attribute.IsDefined() pour vérifier la présence de l'attribut sans instancier un objet d'attribut. La méthode Where() filtre la collection de propriétés, renvoyant uniquement celles qui satisfont au prédicat spécifié.

Cette approche rationalise non seulement le code, mais minimise également la consommation de mémoire en évitant la création d'objets inutiles. Il fournit une solution plus efficace et élégante pour récupérer les propriétés marquées avec des attributs personnalisés.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn