2009-02-10 21 views
1

所以,如果我有如何獲取程序集中的所有基類型?

System.Reflection.Assembly 

的情況下,我有以下模型:

class Person {} 
class Student : Person {} 
class Freshman : Student {} 
class Employee : Person {} 
class PersonList : ArrayList {} 
class StudentList : PersonList {} 

我怎麼能枚舉集的類型去只有人與PersonList類型的參考?

要清楚:我不希望在此查找過程中明確指定Person或PersonList類型。 Person和PersonList只是這個例子中所討論的程序集中定義的根類型。我在尋找一種通用的方法來枚舉給定程序集的所有根類型。

感謝您的時間:)

回答

6

如何:

var rootTypes = from type in assembly.GetTypes() 
       where type.IsClass && type.BaseType == typeof(object) 
       select type; 

?或在非LINQ條款:

foreach (Type type in assembly.GetTypes()) 
{ 
    if (type.IsClass && type.BaseType == typeof(object)) 
    { 
     Console.WriteLine(type); 
    } 
} 

編輯:不,那不會發現PersonList。您需要更清楚「根」的定義。你的意思是「任何類型的基本類型不在同一個程序集中」?如果是這樣的話:

var rootTypes = from type in assembly.GetTypes() 
       where type.IsClass && type.BaseType.Assembly != assembly 
       select type; 
+0

如果程序集將PersonList作爲從ArrayList繼承的根類型,這仍然可以工作嗎? – 2009-02-10 19:42:19

相關問題