【问题标题】:How to get the subclass type just by examining the generic argument on its parent class?如何仅通过检查其父类的泛型参数来获取子类类型?
【发布时间】:2015-08-17 16:28:27
【问题描述】:

例子:

    public class MyClass : AbstractClass<UserDTO>
    {
        public MyClass()
        {
        }

        public string Property1 { get; set; }

        public string Property2 { get; set; }
    }

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

【问题讨论】:

    标签: c# generics inheritance reflection asp.net-web-api2


    【解决方案1】:

    我想你问的是这样的:

    AbstractClass&lt;T&gt; 内部有没有办法,如果T 的类型是UserDTO,我可以确定类X 的类型,其中class X : AbstractClass&lt;UserDTO&gt;

    如果这确实是您的问题,那么简短的回答是“是”。不过,实现它的道路有点曲折。

    第一步,获取系统中所有类型的列表,例如使用https://stackoverflow.com/a/4692463/7122

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

    不过,可能有多个类继承自 AbstractClass&lt;UserDTO&gt;,因此您必须检查所有类型以检查这一点,而不是在第一次匹配时停止。

    【讨论】:

    • 您可以参考下面 Stu 的回答来了解我的意思。好的,我会改写我的问题。
    • @DennisLaping,我已经更新了我的答案来回答我认为你在问的问题。
    • 是的,我明白了。我会试试你的方法。谢谢,大卫。
    【解决方案2】:

    如果您有一个 UserDTO 类的实例而没有其他任何东西,那么我看不到任何方式可以让您看到 MyClass 的拥有实例或类型 - 您将如何区分它和 UserDTO 是不在 MyClass 上?对不起

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2020-07-23
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多