2009-11-12 46 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