从Type中读取引用的命名空间

时间:2009-11-12 14:15:32

标签: c# reflection namespaces

我需要一种通过反射来检查类型使用的所有命名空间的方法。

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 个答案:

答案 0 :(得分:1)

不,我想不出更干净的方式。使用一堆命名空间没有真正的类型本身概念 - 它有成员本身引用类型(在属性/返回类型,字段类型,事件处理程序类型,嵌套类的类型或参数类型)但是那些只是个人成员。

从好的方面来说,使用LINQ并不难做......像:

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

请注意,这不会获取索引器参数类型的名称空间。