C# 获取泛型接口的泛型参数

定义一个泛型接口

    interface IGeneric<T>
    {
    }

假设Apple类继承了这个接口,并将T设为类GenericArgument

    class Apple : IGeneric<GenericArgument>
    {

    }

现在来获取这个[GenericArgument]

    using System.Linq;

    class Program
    {
        static Type[] GetGenericArguments(Type type, Type genericType)
        {
            return type.GetInterfaces() //取类型的接口
                .Where(i => IsGenericType(i)) //筛选出相应泛型接口
                .SelectMany(i => i.GetGenericArguments()) //选择所有接口的泛型参数
                .ToArray(); //ToArray

            bool IsGenericType(Type type1)
                => type1.IsGenericType && type1.GetGenericTypeDefinition() == genericType;
        }

        static void Main(string[] args)
        {
            var arguments = GetGenericArguments(typeof(Apple), typeof(IGeneric<>));
            foreach (var item in arguments)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }

成功输出

继承多次接口和接口有多个泛型参数同理,现在是合成一个List输出,按照需要修改源码即可

参考资料

  1. 博客园-吕毅-.NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值