2009-12-02 18 views

risposta

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

C'è sempre il "one-liner". ;-) –

+1

Sì, devi amare un one-liner :-) –

+2

Questo presuppone che l'intero spazio dei nomi sia nell'assembly corrente, Una soluzione parziale al meglio. – War

6

Senza LINQ:

Prova:

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() ti darà l'elenco che desideri. – Gregory

+0

Sì Greg, anche se tecnicamente, sta utilizzando un metodo di estensione LINQ e il mio esempio è stato pensato per mostrare ciò senza avere .NET 3.5 –

+0

esempio clean non linq sebbene OP non dica che l'assembly è già stato caricato in modo che il codice possa tornare un set vuoto, anche se la lista avrebbe dovuto essere lunga e uno spazio dei nomi potrebbe essere in più assembly :) –

1

posso solo pensare di scorrere i tipi in un assebly per trovare quelli nello spazio dei nomi corretto

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; 
     } 
Problemi correlati