C # ou VB.NET – Itérer tous les énumérations publiques

Nous avons un composant commun dans notre source qui contient tous les enums (environ 300!) Pour une très grande application.

Existe-t-il un moyen, en utilisant C # ou VB.NET, de les parcourir tous afin d’exécuter une action sur chacun d’eux?

La question ” Comment itérer toutes les propriétés” chaîne publique “dans une classe .net est presque pertinente, mais les énumérations que je traite sont un mélange de types

Quelque chose dans ce sens?

var query = Assembly.GetExecutingAssembly() .GetTypes() .Where(t => t.IsEnum && t.IsPublic); foreach (Type t in query) { Console.WriteLine(t); } 

Cela devrait vous aider à démarrer. Parcourez les types dans les assemblys chargés; et vérifiez si elles sont une énumération:

 List enumValues = new List(); foreach(Type t in AppDomain.CurrentDomain.GetAssemblies().Select(a=>a.GetTypes().Where(t=>t.IsEnum))) { enumValues.AddRange(Enum.GetNames(t)); } 

Une fois que tous vos assemblys sont chargés, vous pouvez parcourir chaque assembly et appeler GetTypes () pour renvoyer tous les types (vous pouvez éventuellement obtenir des types privés également, bien que cela prenne plus de temps). Vous pouvez filtrer les types par IsEnum pour obtenir uniquement ceux qui sont des types enum. Notez que cela renverra également tous les types BCL Enum. Si vous ne voulez pas les types BCL, vous devrez les filtrer. Vous pouvez vous débarrasser de la plupart d’entre eux en ignorant les assemblys dont le nom commence par “System”. Vous pouvez également vérifier que le chemin d’access contient votre chemin d’access local, en supposant que tous les assemblys de votre projet sont locaux dans votre fichier EXE.

En supposant que vous avez l’assembly sur lequel les enums réside.

 IEnumerable enums = assembly.GetTypes.Where(t => t.IsEmum); 

Si vous avez toutes les enum compilées dans une enum commune, vous pouvez utiliser quelque chose dans le sens de ceci:

 using System; namespace SomeApp { class Program { static void Main(ssortingng[] args) { foreach(MyEnum target in Enum.GetValues(typeof(MyEnum))) { Console.WriteLine(target.ToSsortingng()); // You can obviously perform an action on each one here. } } } enum MyEnum { One, Two, Three, Four, Five }; } /* Prints... One Two Three Four Five */ 

J’espère que cela peut vous aider à démarrer dans la bonne voie.