C#の名前空間内のすべてのクラスを取得するにはどうすればよいですか?
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);
}