web-dev-qa-db-ja.com

名前空間内のすべてのクラスを取得するにはどうすればよいですか?

C#の名前空間内のすべてのクラスを取得するにはどうすればよいですか?

70
Micheal sonnal

「後方」でそれを行う必要があります。アセンブリ内のすべてのタイプをリストし、各タイプのネームスペースを確認します。

_using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
    return 
      Assembly.GetTypes()
              .Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
              .ToArray();
}
_

使用例:

_Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
{
    Console.WriteLine(typelist[i].Name);
}
_

Assembly.GetExecutingAssembly()が使用できない.Net 2.0より前の場合は、アセンブリを取得するための小さな回避策が必要になります。

_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);
}
_
129
Fredrik Mörk

もう少し情報を提供する必要があります...

Reflectionを使用するということですか?アセンブリマニフェストを反復処理し、次を使用して型のリストを取得できます。

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

   myAssembly.ManifestModule.FindTypes()

Visual Studioのみの場合は、インテリセンスウィンドウでリストを取得するか、オブジェクトブラウザー(CTRL + W、J)を開くだけで取得できます。

5
Eoin Campbell

Reflectionを使用すると、アセンブリ内のすべてのタイプをループ処理できます。型には、関心のある名前空間のみをフィルター処理するために使用する名前空間プロパティがあります。

0
Gerrie Schenck