Maison >développement back-end >C++ >Comment LINQ peut-il trouver efficacement tous les types dérivés d'un type de base spécifié ?

Comment LINQ peut-il trouver efficacement tous les types dérivés d'un type de base spécifié ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-03 19:04:41702parcourir

How Can LINQ Efficiently Find All Derived Types of a Specified Base Type?

Recherche de types dérivés d'un type spécifié

En programmation, il est souvent nécessaire de déterminer tous les types dérivés d'un type de base donné. Traditionnellement, cela était réalisé grâce à des techniques laborieuses telles que l'itération sur tous les types dans les assemblys chargés et la vérification manuelle de l'assignabilité au type cible.

Cependant, une solution plus efficace et plus élégante existe en utilisant LINQ (Language Integrated Query) . L'extrait de code suivant fournit un moyen simple et performant d'accomplir cette tâche :

var listOfDerivedTypes = (
                from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
                from type in domainAssembly.GetTypes()
                where typeof(BaseTypeName).IsAssignableFrom(type)
                select type).ToArray();

Syntaxe Fluent alternative :

L'expression LINQ peut également être écrite dans un format plus style fluide pour améliorer lisibilité :

var listOfDerivedTypes = AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(domainAssembly => domainAssembly.GetTypes())
                .Where(type => typeof(BaseTypeName).IsAssignableFrom(type))
                .ToArray();

Personnalisations :

  • Uniquement les types visibles publiquement : Pour récupérer uniquement les types visibles publiquement, utilisez domainAssembly .GetExportedTypes() au lieu de domainAssembly.GetTypes().
  • Exclure la classe de base d'origine : Pour empêcher le type de base d'origine d'être inclus dans les résultats, ajoutez && type != typeof(BaseTypeName) à la clause Where.
  • Exclure les classes abstraites : Pour exclure les classes abstraites, ajoutez && ! type.IsAbstract à la clause Where.
  • Types génériques : La gestion des types génériques nécessite des considérations supplémentaires. Pour obtenir des conseils, reportez-vous aux ressources liées dans la section « Détails ».

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