C# MethodInfo内并没有字段用来标识该方法是否为扩展方法。目前只能通过自己扩展来判断方法是否为扩展方法,代码如下:
static IEnumerable<MethodInfo> GetExtensionMethods(Assembly assembly, Type extendedType)
{
var query = from type in assembly.GetTypes()
where !type.IsGenericType && !type.IsNested
from method in type.GetMethods(BindingFlags.Static
| BindingFlags.Public | BindingFlags.NonPublic)
where method.IsDefined(typeof(System.Runtime.CompilerServices.ExtensionAttribute), false)
].ParameterType == extendedType
select method;
return query;
}
核心代码就一句:
method.IsDefined(typeof(System.Runtime.CompilerServices.ExtensionAttribute), false)