2009-12-02 4 views
8

与えられた名前空間内のすべてのクラスのListをプログラムで取得する必要があります。どうすればC#でこれを実現できますか? LINQなしC#のネームスペースのクラスのリストを取得

+0

質問が重複としてマークされ、元のものが参照されない場合、どのように迷惑になりますか。 – War

答えて

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

「ワンライナー」はいつもあります。 ;-) –

+1

ええ、あなたはワンライナーが好きです:-) –

+2

これは、名前空間全体が現在のアセンブリにあると仮定しています。 – War

6

試してみてください。

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()は、必要なリストを提供します。 – Gregory

+0

はいGregは、技術的にはLINQ拡張メソッドを使用していますが、私の例では、.NET 3.5を使用せずにこれを表示することを意図していました。 –

+0

クリーンなnon linqの例OPは、アセンブリが既にロードされているリストが長くなり、名前空間がより多くのアセンブリにあるはずの空のセットイベント:) –

1

私はできる簡単に返すために、これを変更することができます正確な名前空間内の型を見つけるために型をループすることを考えてください。

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; 
     } 
関連する問題