C# 經過反射獲取擴展方法

注意,擴展方法本質上是靜態方法,因此拿到MethodInfo時,應該這麼調用 methodInfo.Invoke(null, new object[]{params})spa

 

 1 static IEnumerable<MethodInfo> GetExtensionMethods(Assembly assembly, Type extendedType)
 2         {
 3             var query = from type in assembly.GetTypes()
 4                         where !type.IsGenericType && !type.IsNested
 5                         from method in type.GetMethods(BindingFlags.Static
 6                             | BindingFlags.Public | BindingFlags.NonPublic)
 7                         where method.IsDefined(typeof(System.Runtime.CompilerServices.ExtensionAttribute), false)
 8                         where method.GetParameters()[0].ParameterType == extendedType
 9                         select method;
10             return query;
11         }
相關文章
相關標籤/搜索