¿Cómo puedo obtener todas las clases dentro de un espacio de nombres en C #?
¿Cómo puedo obtener todas las clases dentro de un espacio de nombres en C #?
Respuestas:
Deberá hacerlo "al revés"; enumere todos los tipos en un ensamblado y luego verifique el espacio de nombres de cada tipo:
using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
return
assembly.GetTypes()
.Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
.ToArray();
}
Ejemplo de uso:
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
{
Console.WriteLine(typelist[i].Name);
}
Para cualquier cosa anterior a .Net 2.0 donde Assembly.GetExecutingAssembly()
no esté disponible, necesitará una pequeña solución para obtener el ensamblaje:
Assembly myAssembly = typeof(<Namespace>.<someClass>).GetTypeInfo().Assembly;
Type[] typelist = GetTypesInNamespace(myAssembly, "<Namespace>");
for (int i = 0; i < typelist.Length; i++)
{
Console.WriteLine(typelist[i].Name);
}
Deberá proporcionar un poco más de información ...
¿Quieres decir usando Reflection. Puede iterar a través de un manifiesto de ensamblados y obtener una lista de tipos usando
System.Reflection.Assembly myAssembly = Assembly.LoadFile("");
myAssembly.ManifestModule.FindTypes()
Si solo está en Visual Studio, puede obtener la lista en la ventana de intellisense o abriendo el Explorador de objetos (CTRL + W, J)
Con Reflection, puede recorrer todos los tipos de un ensamblaje. Un tipo tiene una propiedad de espacio de nombres que usa para filtrar solo el espacio de nombres que le interesa.