2012-02-06 74 views
1

我有一個方法,這是dooing在組裝的所有類的一些工作:循環在程序集的命名空間中?

var library = Assembly.LoadFrom(libraryPath); 
IEnumerable<Type> types = library.GetTypes(); 

foreach (Type type in types) 
{ 
    [...] 
} 

的事情是,現在,我想我的分裂代碼我組裝的每個命名空間!像

var library = Assembly.LoadFrom(libraryPath); 
IEnumerable<Type> types = library.GetTypes(); 

foreach (/*namespace in my assembly*/) 
{ 
    foreach (Type type /*in my Namespace*/) 
    { 
     [...] 
    } 
} 

但我在網絡上所有的研究後,在這裏的東西,所以我沒有發現任何東西,我喜歡... 我能夠做的唯一的事情就是:

List<string> namespaceList = new List<string>(); 

foreach (Type type in types) 
{ 
    if (!namespaceList.Contains(type.Namespace)) 
    { 
     namespaceList.Add(type.Namespace); 
    } 
} 

但是我無法對這個List做任何事...... 是的,我可以循環遍歷namespaceList上的所有成員,然後遍歷所有類型,並測試它們是否在當前命名空間內(字符串比較),但我真的覺得它不是要走的路...

任何幫助將非常感激 !

回答

5

可以使用LINQ GroupBy method

var namespaces = library.GetTypes().GroupBy(t => t.Namespace); 
foreach (var typesInNamespace in namespaces) 
{ 
    foreach (var type in typesInNamespace) 
    { 
     ... 
    } 
} 
+0

HOOO,聽起來像正是我一直在尋找! – 2012-02-06 14:34:48

相關問題