Чтение ссылочных пространств имен из Type - PullRequest
0 голосов
/ 12 ноября 2009

Мне нужен способ проверить все пространства имен, используемые типом, с помощью отражения.

namespace My.Program.BaseTypes
{
    using System;
    using System.Text;
    using My.Program.Extenders;
    using My.Program.Helpers;
    using My.Program.Interfaces;

    public class MyTypeBase
    {
        public MyTypeBase()
        {
        }

        public My.Program.Helpers.HelperTypeX X
        {
            get;
            set;
        }

        public My.Program.Extenders.ExtenderTypeY Y
        {
            get;
            set;
        }

        public My.Program.Interfaces.InterfaceZ IZ
        {
            get;
            set;
        }
    }
}

В моем коде есть только Type MyTypeBase, и мне нужно с отражением выяснить все ссылочные пространства имен всех свойств в MyTypeBase.

Конечно, я мог бы пройтись по всем свойствам, получить из них типы и проверить их пространства имен, но есть ли более чистый способ достижения этой цели?

Чтобы избежать вопроса, он предназначен для написания генератора, который должен создавать новые классы на основе некоего устаревшего кода.

1 Ответ

1 голос
/ 12 ноября 2009

Нет, я не могу придумать более чистого способа сделать это. Нет реальной концепции самого типа, использующего кучу пространств имен - у него есть члены, которые сами ссылаются на типы (либо в свойстве / типе возврата, типе поля, типе обработчика события, типе вложенного класса или типе параметра), но это просто отдельные члены.

С положительной стороны, с LINQ это не должно быть трудно сделать ... что-то вроде:

var namespaces = type.GetProperties()
                     .Select(p => p.PropertyType.Namespace)
                     .Distinct();

Обратите внимание, что это не будет использовать пространства имен типов параметров индексатора.

...