2009-11-12 20 views
0

中读取引用的命名空间我需要一种方法通过反射来检出某个类型使用的所有命名空间。从类型

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; 
     } 
    } 
} 

我MyTypeBase的只有Type在我的代码,需要找出与反射所有属性的所有引用的命名空间中MyTypeBase。

当然,我可以遍历所有的属性,从它们中获取类型并检查它们的命名空间,但是有没有一种更简单的方法来实现这个目标?

为了避免这个问题,它是为了编写一个生成器,它将根据一些遗留代码创建新的类。

回答

1

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

从有利的一面,与LINQ它不应该是很难做到的......是这样的:

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

注意,不会拿起索引参数类型的命名空间。

+0

我想到了这样的事情,需要更快地阅读你的书,以便与linq和lambda表达式联系起来;-) – 2009-11-12 14:45:20