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)
本文介绍了一种在C#中检测扩展方法的有效方法。通过使用System.Runtime.CompilerServices.ExtensionAttribute,可以查询特定程序集中的所有扩展方法。核心代码展示了如何筛选出静态、公共或非公共的方法,并检查它们是否带有ExtensionAttribute。
595

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



