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# 判斷某個類是否是泛型類型或泛型接口的子類型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章