注意,扩展方法本质上是静态方法,所以拿到MethodInfo时,应该这么调用 methodInfo.Invoke(null, new object[]{params})
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 }
本文深入探讨了C#中扩展方法的本质,即静态方法,并提供了如何通过反射获取和调用这些方法的代码示例。同时,文章分享了一个实用的LINQ查询,用于从指定程序集中查找所有针对特定类型定义的扩展方法。
540

被折叠的 条评论
为什么被折叠?



