2009-02-10 51 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

相关问题