Devo recuperare tutte le enumerazioni caricate da un determinato set di assiemi.Come posso ottenere un elenco di tutti i tipi caricati in C#?
risposta
List<Type> list = new List<Type>();
foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (Type t in ass.GetExportedTypes())
{
if (t.IsEnum)
{
list.Add(t);
}
}
}
Questo dovrebbe fare, per tutti gli assembly caricati dalla corrente AppDomain, per arrivare proprio da insiemi di cui, basta regolare ;-)
Parte divertente (foneticamente): "solo regolare" :) –
Dando per scontato che hai l'elenco dei Assembly
oggetti che si desidera controllare:
IEnumerable<Assembly> assemblies; // assign the assemblies you want to check here
foreach (Assembly a in assemblies) {
foreach (Type t in assembly.GetTypes()) {
if (t.IsEnum) {
// found an enum! Do whatever...
}
}
}
si dovrebbe essere in grado di utilizzare Assembly.GetTypes()
per ottenere tutti i tipi per il montaggio. Per ogni tipo, puoi usare la proprietà Type.IsEnum
per vedere se è un enum.
È inoltre possibile utilizzare LINQ per restituire un elenco di tutti i tipi enum da un elenco di assiemi.
IEnumerable<Assembly> assemblies;
// give assemblies some value
var enums = from assembly in assemblies let types = assembly.GetTypes() from type in types where type.IsEnum select type;
enums
sarà di tipo IEnumerable.
Ecco una soluzione più funzionale:
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.IsEnum)
Che cosa significa "che sono stati caricati" significa? Puoi dare un esempio di un tipo che non è stato caricato rispetto a un tipo che viene caricato? –