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
Libérer: 2025-01-03 19:04:41
original
643 Les gens l'ont consulté

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();
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal