Je dois obtenir programmatimatiquement obtenir une liste code> de toutes les classes d'un espace de noms donné. Comment puis-je atteindre cela (réflexion?) En C #? p>
4 Réponses :
sans linq:
Essayez: p>
Assemblage.getexecutingassemblage (). GetTypes (). Tolist () vous donnera la liste que vous voulez.
Oui Greg, bien que techniquement, qui utilise une méthode d'extension LINQ et mon exemple visait à montrer cela sans avoir .NET 3.5
Nettoyer l'exemple non Linq Bien que OP ne dise pas que l'assembly a déjà été chargé, le code peut renvoyer un ensemble vide Eventhough La liste aurait dû être longue et un espace de nom pourrait être dans plus d'assemblages :)
Point équitable, j'aurais dû créer une méthode avec un paramètre d'assemblage en tant qu'entrée et laissé le client appeler à la puissance totale. ;-)
Les mêmes espaces de noms dans plus d'assemblages ne sont pas comment je le concevoirais. Fine pour les espaces de noms de base, mais je n'aurais certainement pas de types dans les mêmes espaces de noms étalés sur plusieurs assemblys. C'est sale.
Je ne peux penser que de boucler à travers des types dans un assemblage pour les trouver dans le bon espace de noms
var theList = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.Namespace == "your.name.space") .ToList();
Il y a toujours les "doublures". ;-)
Oui, tu dois aimer un one-liner :-)
Cela suppose que l'ensemble des noms de noms est dans l'assemblée actuelle, une solution partielle au mieux.
Guerre, quelle serait une meilleure solution alors?
Quelle gêne quand une question est marquée comme un duplicata et que l'original n'est pas référencé.