"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment LINQ peut-elle trouver efficacement tous les types dérivés d'un type de base spécifié?

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

Publié le 2025-03-23
Parcourir:396

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

Trouver des 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 a été réalisé grâce à des techniques laborieuses telles que l'itération de tous les types dans les assemblages chargés et la vérification manuelle de la attribuabilité au type cible.

Cependant, une solution plus efficace et élégante existe en utilisant LINQ (Language Integrated Query). L'extrait de code suivant fournit un moyen simple et performant pour 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 fluide alternative:

L'expression linq peut également être écrite dans un style plus fluide pour la lisibilité améliorée:

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

Customations:

  • Seuls les types visibles publiquement: pour récupérer uniquement des types publiquement visibles DomainAssembly.getTypes ().
  • Exclure la classe de base originale: pour empêcher le type de base d'origine d'être inclus dans les résultats, add && type! = typeof (BasetyPename) à la clause où. type.isabstract à la clause où.
  • types génériques: Gestion des types génériques nécessite des considérations supplémentaires. Pour dire, reportez-vous aux ressources liées dans la section "Détails".
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3