定义一个泛型接口
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输出,按照需要修改源码即可
参考资料