Как загрузить системные классы пространства имен?

У меня есть небольшой вопрос. Я нашел это в Интернете:

Type t = typeof(MyClass);
MethodInfo[] mi = t.GetMethods();

Есть ли способ сделать то же самое с пространствами имен? Или есть другой способ получить все классы с именами и экземплярами System.Type? Давным-давно я нашел что-то о перечислении библиотеки. Пожалуйста, помогите мне.


person user35443    schedule 27.03.2012    source источник
comment
Вы можете получить все классы из сборки системы, используя этот небольшой лайфхак: typeof(string).Assembly.GetTypes().   -  person Sergey Kalinichenko    schedule 27.03.2012
comment
В порядке. Но что мне делать, если мне нужно получить его, например, из System.IO?   -  person user35443    schedule 27.03.2012
comment
возможный дубликат Поиск всех пространств имен в сборке с использованием Reflection (DotNET)   -  person Bernard    schedule 27.03.2012
comment
И, пожалуйста, напишите это как ответ. Я отмечу это.   -  person user35443    schedule 27.03.2012
comment
@dasblinkenlight, который получит все в сборке mscorlib, а не в System.   -  person vcsjones    schedule 27.03.2012
comment
Каждый тип имеет свойство Namespace, вы можете фильтровать его с помощью LINQ или цикла foreach, как вам больше нравится.   -  person Sergey Kalinichenko    schedule 27.03.2012
comment
О, System.IO материал тоже будет там: mscorlib имеет 2500+ классов.   -  person Sergey Kalinichenko    schedule 27.03.2012
comment
Помните, что между сборками и пространствами имен нет отношения «один к одному» (или «один ко многим»). Сборка может содержать много пространств имен (что неудивительно), но пространство имен также может быть определено в нескольких сборках. По сути, отношения многие ко многим. Запрашивать все типы в конкретном пространстве имен нельзя, если только вы не укажете, какие сборки искать.   -  person Martin Liversage    schedule 27.03.2012
comment
Да, я сейчас это. Но я сделал ошибку, потому что иногда, когда я использую сокеты, я должен добавить System.Net в ссылки в Viusal Studio...   -  person user35443    schedule 27.03.2012


Ответы (2)


Вы можете получить все классы из сборки mscorlib, используя этот небольшой лайфхак: typeof(string).Assembly.GetTypes(). Вы можете дополнительно отфильтровать его по свойству FullName или Namespace.

person Sergey Kalinichenko    schedule 27.03.2012

Если вы хотите получить все классы в определенном пространстве имен, вы можете сделать что-то вроде этого:

var types = from type
            in AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
            where type.Namespace == "System"
            select type;

Это будет искать во всех загруженных сборках любой тип в пространстве имен System. Конечно, вы можете изменить «System» на что угодно, например «System.IO».

person vcsjones    schedule 27.03.2012
comment
Большое тебе спасибо. Ваше решение кажется отличным, но он был первым. - person user35443; 27.03.2012