[英]How I can find all extension methods in solution?
如何在解决方案中找到所有扩展方法?
如果我这样做,我会在所有文件中搜索字符串“(this” - 您的搜索字符串可能因格式选项而异。
编辑 :经过一些实验,以下似乎使用“在文件中查找”(Ctrl-Shift-F)高精度地为我工作
\\( this [A-Za-z]
”(当然减去引号) 我将使用反射查看生成的程序集; 使用[ExtensionAttribute]
遍历查找方法的静态类型...
static void ShowExtensionMethods(Assembly assembly)
{
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass && !type.IsGenericTypeDefinition
&& type.BaseType == typeof(object)
&& type.GetConstructors().Length == 0)
{
foreach (MethodInfo method in type.GetMethods(
BindingFlags.Static |
BindingFlags.Public | BindingFlags.NonPublic))
{
ParameterInfo[] args;
if ((args = method.GetParameters()).Length > 0 &&
HasAttribute(method,
"System.Runtime.CompilerServices.ExtensionAttribute"))
{
Console.WriteLine(type.FullName + "." + method.Name);
Console.WriteLine("\tthis " + args[0].ParameterType.Name
+ " " + args[0].Name);
for (int i = 1; i < args.Length; i++)
{
Console.WriteLine("\t" + args[i].ParameterType.Name
+ " " + args[i].Name);
}
}
}
}
}
}
static bool HasAttribute(MethodInfo method, string fullName)
{
foreach(Attribute attrib in method.GetCustomAttributes(false))
{
if (attrib.GetType().FullName == fullName) return true;
}
return false;
}
也许本文中有关如何查找目标对象的扩展方法的代码可以使用? 例如,可以稍微重写并使用它来转储所有扩展方法,而不仅仅是那些目标object
。
您是否只想查看源代码(只需查看(this ...
文件中的...)或通过反射查找正在运行的程序(在这种情况下, 此讨论可以帮助您)?
解决方案宽文本搜索与正则表达式匹配您的编码风格。 像"( *this +"
类的东西(添加第一个可选空格以获得一些错误的容忍)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.