【问题标题】:How do I get all the base types in an assembly?如何获取程序集中的所有基本类型?
【发布时间】:2009-02-10 19:37:35
【问题描述】:

所以如果我有一个

的实例
System.Reflection.Assembly 

我有以下型号:

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

如何枚举程序集的类型以仅获取对 Person 和 PersonList 类型的引用?

明确一点:我不想在此查找期间明确指定 Person 或 PersonList 类型。 Person 和 PersonList 只是在此示例的相关程序集中定义的根类型。我正在寻找一种通用方法来枚举给定程序集的所有根类型。

感谢您的宝贵时间:)

【问题讨论】:

    标签: c# .net reflection


    【解决方案1】:

    怎么样:

    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;
    

    【讨论】:

    • 如果程序集将 PersonList 作为从 ArrayList 继承的根类型,这仍然有效吗?
    • 抱歉不清楚。不知道怎么问这个。答案的后半部分看起来很棒。会尝试。谢谢。
    猜你喜欢
    • 2011-01-15
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2013-08-31
    • 2016-12-05
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多