1. ホーム
  2. c#

[解決済み] ネームスペース内のすべてのクラスを取得するにはどうすればよいですか?

2023-04-21 02:12:33

質問

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

どのように解決するのですか?

アセンブリ内のすべての型をリストアップし、各型の名前空間をチェックします。

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


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

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