Как я могу получить все классы в пространстве имен? - PullRequest
67 голосов
/ 04 июня 2009

Как я могу получить все классы в пространстве имен в C #?

Ответы [ 3 ]

128 голосов
/ 04 июня 2009

Вам нужно будет сделать это «задом наперед»; перечислить все типы в сборке и затем проверить пространство имен каждого типа:

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);
}
5 голосов
/ 04 июня 2009

Вам нужно будет предоставить немного больше информации ...

Вы имеете в виду, используя отражение. Вы можете перебирать манифест сборки и получите список типов, используя

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

   myAssembly.ManifestModule.FindTypes()

Если это только в Visual Studio, вы можете просто получить список в окне intellisense или открыв Обозреватель объектов (CTRL + W, J)

0 голосов
/ 04 июня 2009

С помощью Reflection вы можете просмотреть все типы в сборке. Тип имеет свойство Namespace, которое вы используете для фильтрации только интересующего вас пространства имен.

...