代码之家  ›  专栏  ›  技术社区  ›  Kevin Vaughan

从类型读取引用的命名空间

  •  0
  • Kevin Vaughan  · 技术社区  · 16 年前

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

    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 回复  |  直到 16 年前
        1
  •  1
  •   Jon Skeet    16 年前

    不,我想不出一个更干净的方法来做这个。使用一组名称空间并没有真正的类型本身的概念-它有自己引用类型的成员(在属性/返回类型、字段类型、事件处理程序类型、嵌套类的类型或参数类型中),但这些成员只是单独的成员。

    有利的一面是,有了Linq,应该不难做到…比如:

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

    请注意,这不会占用索引器参数类型的命名空间。