Nous avons un composant commun dans notre source qui contient toutes les énumes (environ 300!) pour une très grande application. P>
Y a-t-il un moyen, en utilisant c # ou vb.net, pour les utiliser à tous afin d'effectuer une action sur chacun? P>
La question Comment itérer tout " String publique "Propriétés dans une classe .NET est presque pertinente, mais les Enums que je traite sont un mélange de types p>
5 Réponses :
Une fois que toutes vos assemblées sont chargées, vous pouvez itérer à chaque assemblage et appeler gettypes () pour renvoyer tous les types (vous pouvez également obtenir des types privés aussi, bien que cela faudra plus longtemps). Vous pouvez filtrer les types par isenum pour obtenir uniquement ceux qui sont des types d'énumjet. Notez que cela retournera également tous les types de BCL Enum. Si vous ne voulez pas les types de BCL, vous devrez les filtrer. Vous pouvez vous débarrasser de la plupart en ignorant les assemblées dont les noms commencent par «Système». Alternativement, vous pouvez vérifier que le chemin contient votre chemin local, en supposant que tous vos assemblages de projet sont locaux de votre EXE. P>
Cela devrait vous aider à démarrer. Itérer à travers les types dans les assemblages chargés; et vérifier si elles sont une énumération:
Cela donne une erreur d'exécution: Impossible de lancer l'objet de type 'WhayRayiterator Code> 1 [System.tpe]' Pour taper "System.type'."
@Shevek j'ai eu la même exception. En fait, j'ai trouvé cette question lorsque vous recherchez la cause de cette exception dans un autre contexte. Ceci est résolu en remplaçant Select par SelectMany. J'ai mis à jour la réponse.
quelque chose sur ces lignes?
var query = Assembly.GetExecutingAssembly() .GetTypes() .Where(t => t.IsEnum && t.IsPublic); foreach (Type t in query) { Console.WriteLine(t); }
Je vais ceci pour fonctionner (en utilisant var a = assembly.load ("myassembly"); code> et
requête var requête = A.getTypes (). Où (t => t.isenum && t. Ispublic); code>) mais comment puis-je les utiliser alors? Tous les
t code> sont de type
system.runtimetype code> et je veux les utiliser comme Enums (très nouveau à toutes ces trucs de réflexion!)
@Shevek: C'est une question différente. Que voulez-vous faire exactement avec toutes ces énumes différentes?
J'ai besoin d'itérer chacun des énums et de générer un script d'insertion SQL pour créer une table de recherche.
J'ai compris! var valeurs = nouvelle liste
En supposant que vous ayez l'assemblage sur lequel réside l'ENUMS.
Si vous avez tous les Cela peut vous aider à démarrer le bon chemin. P> P> Enums code> compilé dans un
enum commun code>, vous pouvez utiliser quelque chose sur les lignes de ceci: