2009-06-04 9 views
58

¿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?

+1

posible duplicado de [Extracción de todas las clases de un nombre específico espacio] (http://stackoverflow.com/questions/343869/taking-out-all-classes-of-a-specific-namespace) – nawfal

+1

Posible duplicado de [Obtener todos los tipos en un espacio de nombres a través de la reflexión] (https: // stackoverflow.com/questions/79693/getting-all-types-in-a-namespace-via-reflection) – Liam

Respuesta

108

Tendrá que hacerlo "al revés"; una lista de todos los tipos en un ensamblaje y luego comprobando 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 antes de .Net 2.0, donde Assembly.GetExecutingAssembly() no está disponible, necesitará una pequeña solución para obtener el ensamblado:

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); 
} 
+2

. Where (t => String.Equals (t.Namespace, nameSpace, StringComparison.Ordinal) – abatishchev

+6

Además, consérvese en Tenga en cuenta que Assembly! = espacio de nombres: algunos espacios de nombres se extienden a través de varios ensamblados. – Bevan

+1

y por qué no devolver solo un IEnumerable ? Aún más, haces una enumeración entre los resultados, creo que también es mejor 'foreach' en vez de 'para'. – abatishchev

0

Con Reflection puede realizar un ciclo de todos los tipos en un conjunto. Un tipo tiene una propiedad Espacio de nombres que se utiliza para filtrar sólo el espacio de nombres que le interesa.

5

Usted tendrá que proporcionar un poco más de información ...

Qué quiere decir con el uso de Reflexión. Se puede recorrer un ensamblajes Manifiesto y obtener una lista de tipos usando

System.Reflection.Assembly myAssembly = Assembly.LoadFile(""); 

    myAssembly.ManifestModule.FindTypes() 

Si es sólo en Visual Studio, sólo puede obtener la lista en la ventana de IntelliSense, o abriendo el Examinador de objetos (CTRL + W , J)

Cuestiones relacionadas