定義一個泛型接口
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輸出,按照需要修改源碼即可
參考資料