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

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


답변

좀 더 많은 정보를 제공해야합니다 …

리플렉션을 사용한다는 뜻입니까? 어셈블리 매니페스트를 반복하고 다음을 사용하여 형식 목록을 가져올 수 있습니다.

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

   myAssembly.ManifestModule.FindTypes()

Visual Studio에만있는 경우 인텔리 센스 창에서 목록을 가져 오거나 개체 브라우저 (CTRL + W, J)를 열어서 가져올 수 있습니다.


답변

Reflection을 사용하면 어셈블리의 모든 유형을 반복합니다. 유형에는 관심있는 네임 스페이스 만 필터링하는 데 사용하는 Namespace 속성이 있습니다.


답변