如何通过检查父类上的泛型参数来获取子类类型

本文关键字:参数 获取 子类 类型 泛型 何通过 检查 父类 | 更新日期: 2023-09-27 17:52:53

示例:

    public class MyClass : AbstractClass<UserDTO>
    {
        public MyClass()
        {
        }
        public string Property1 { get; set; }
        public string Property2 { get; set; }
    }

是否可以通过检查UserDTO对象来获得MyClass的类型?如果是,如何?TIA

如何通过检查父类上的泛型参数来获取子类类型

我想你在问这样的问题:

AbstractClass<T>中,有没有一种方法,在T的类型为UserDTO的情况下,我可以确定类别X的类型,其中class X : AbstractClass<UserDTO>

如果这确实是你的问题,那么简短的回答是"是"。然而,实现这一目标的道路有点曲折。

第一步,使用例如https://stackoverflow.com/a/4692463/7122.

下一步,对于每个类型,使用BaseType属性来获取其父类型。如果该类型是AbstractClass,则检查其GenericTypeArguments属性以查看它是否是UserDTO。如果是,那就是你的类型。

但是,可能有多个类从AbstractClass<UserDTO>继承,因此您必须检查所有类型来检查这一点,而不是在第一个匹配时停止。

如果你有一个UserDTO类的实例,而没有其他东西,那么我看不出你能以任何方式看到MyClass的拥有实例或类型-你如何区分它和不在MyClass上的UserDTO?抱歉