2009-12-02 21 views

Respuesta

24
var theList = Assembly.GetExecutingAssembly().GetTypes() 
         .Where(t => t.Namespace == "your.name.space") 
         .ToList(); 
+0

Siempre están los "one-liners". ;-) –

+1

Sí, tienes que amar a una línea :-) –

+2

Esto supone que todo el espacio de nombres está en el ensamblaje actual, una solución parcial en el mejor de los casos. – War

6

Sin LINQ:

Probar:

Type[] types = Assembly.GetExecutingAssembly().GetTypes(); 
List<Type> myTypes = new List<Type>(); 
foreach (Type t in types) 
{ 
    if (t.Namespace=="My.Fancy.Namespace") 
    myTypes.Add(t); 
} 
+0

Assembly.GetExecutingAssembly(). GetTypes(). ToList() le dará la lista que desea. – Gregory

+0

Sí Greg, aunque técnicamente, está utilizando un método de extensión LINQ y mi ejemplo fue para mostrar esto sin tener .NET 3.5 –

+0

limpiar ejemplo no lineal aunque OP no dice que el ensamblado ya se ha cargado para que el código pueda regresar un conjunto vacío aunque la lista debería haber sido larga y un espacio de nombre podría estar en más conjuntos :) –

1

que pueda solo piense en pasar por los tipos en una forma segura para encontrar los que están en el espacio de nombres correcto

public List<Type> GetList() 
     { 
      List<Type> types = new List<Type>(); 
      var assembly = Assembly.GetExecutingAssembly(); 
      foreach (var type in assembly .GetTypes()) 
      { 
       if (type.Namespace == "Namespace") 
       { 
        types.Add(type); 
       } 
      } 
      return types; 
     } 
Cuestiones relacionadas