如何找出类型是否实现泛型基类

贝基

使用下面的示例...如何确定属性是否属于实现泛型类Foo的类型?

public class Foo<TBaz>
{

}

public class Bar
{
    public Foo<int> FooInt { get; set; }
    public Foo<string> FooString { get; set; }
    public double SomeOther { get; set; }

    public int GetFooCount()
    {
        return typeof(Bar).GetProperties().Where(p => p.GetType().IsGenericType).Count();
    }
}

如果我想找到Foo<int>,它会很容易,但我怎么能找到它是否包含Foo<int>Foo<double>等...?

到目前为止,我已经写了一些GetFooCount()...

谢谢

马克·格雷韦尔
return typeof(Bar).GetProperties().Where(p => p.PropertyType.IsGenericType
    && p.PropertyType.GetGenericTypeDefinition() == typeof(Foo<>)).Count();

注意:这不会自动适用class NonGenericSubtype : Foo<Blah> {...},也不会适用class GenericSubtype<T> : Foo<T> {...}-如果您需要处理这些,它将变得更加有趣。

对于更一般的情况,您需要在类型上使用递归的内容:

public static int GetFooCount()
{
    return typeof(Bar).GetProperties()
        .Count(p => GetFooType(p.PropertyType) != null);
}

private static Type GetFooType(Type type)
{
    while(type != null)
    {
        if (type.IsGenericType &&
            type.GetGenericTypeDefinition() == typeof(Foo<>))
                return type.GetGenericArguments()[0];
        type = type.BaseType;
    }
    return null;
}

请注意,这还会回答“现在如何查找T?”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何找出类型是否实现泛型基类

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

是否可以根据实现的类型类为泛型定义不同的行为?

来自分类Dev

如何使用泛型实现类型安全?

来自分类Dev

如何使用泛型实现类型声明?

来自分类Dev

C#如何在泛型类型实现某些类时强制转换类

来自分类Dev

如何为泛型类指定泛型集合类型?

来自分类Dev

泛型类型,其类型参数是抽象基类

来自分类Dev

如何使用类型的辅助类泛型

来自分类Dev

如何返回泛型类型的类

来自分类Dev

如何定义不是类的泛型类型?

来自分类Dev

在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

来自分类Dev

实现泛型类时无法推断类型变量

来自分类Dev

泛型类型可以实现多个抽象类吗?

来自分类Dev

接口与实现接口的类的泛型类型有关?

来自分类Dev

在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

来自分类Dev

在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

来自分类Dev

检查类中泛型类型是否为特定类型

来自分类Dev

如何在基类的方法中使用泛型指定out参数的类型?

来自分类Dev

new()的泛型类型约束和抽象基类

来自分类Dev

Java泛型:如何为泛型类型化的类指定类类型?

来自分类Dev

Java泛型:如何为泛型类型化的类指定类类型?

来自分类Dev

Typescript泛型是否使用类型擦除来实现泛型?

来自分类Dev

检查泛型参数类型是否从某个类X派生

来自分类Dev

是否可以重用某个类的泛型的类型参数

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

如何实现具有泛型类型的接口?

来自分类Dev

如何实现具有泛型类型的接口?

来自分类Dev

如何限制接口仅由泛型类型实现

Related 相关文章

  1. 1

    如何找出类型是否实现泛型基类

  2. 2

    如何使用泛型返回泛型类的类类型?

  3. 3

    是否可以根据实现的类型类为泛型定义不同的行为?

  4. 4

    如何使用泛型实现类型安全?

  5. 5

    如何使用泛型实现类型声明?

  6. 6

    C#如何在泛型类型实现某些类时强制转换类

  7. 7

    如何为泛型类指定泛型集合类型?

  8. 8

    泛型类型,其类型参数是抽象基类

  9. 9

    如何使用类型的辅助类泛型

  10. 10

    如何返回泛型类型的类

  11. 11

    如何定义不是类的泛型类型?

  12. 12

    在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

  13. 13

    实现泛型类时无法推断类型变量

  14. 14

    泛型类型可以实现多个抽象类吗?

  15. 15

    接口与实现接口的类的泛型类型有关?

  16. 16

    在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

  17. 17

    在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

  18. 18

    检查类中泛型类型是否为特定类型

  19. 19

    如何在基类的方法中使用泛型指定out参数的类型?

  20. 20

    new()的泛型类型约束和抽象基类

  21. 21

    Java泛型:如何为泛型类型化的类指定类类型?

  22. 22

    Java泛型:如何为泛型类型化的类指定类类型?

  23. 23

    Typescript泛型是否使用类型擦除来实现泛型?

  24. 24

    检查泛型参数类型是否从某个类X派生

  25. 25

    是否可以重用某个类的泛型的类型参数

  26. 26

    如何在类中使用扩展的泛型类型的类型?

  27. 27

    如何实现具有泛型类型的接口?

  28. 28

    如何实现具有泛型类型的接口?

  29. 29

    如何限制接口仅由泛型类型实现

热门标签

归档