如何在解决方案中找到所有扩展方法?

如何在解决方案中找到所有扩展方法?

如果我这样做,我会搜索所有文件中的字符串“(这个” – 您的搜索字符串可能会因您的格式选项而异。

编辑 :经过一些实验,以下似乎使用“在文件中查找”(Ctrl-Shift-F)高精度地为我工作

  • 搜索字符串:“ \( this [A-Za-z] ”(当然减去引号)
  • 匹配案例:未选中
  • 匹配整个单词:未选中
  • 使用:正则表达式
  • 看看这些文件类型:“* .cs”

我将使用reflection查看生成的程序集; 使用[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 ...在文件中)…或者通过reflection查找正在运行的程序(在这种情况下, 此讨论可以帮助您)?

解决方案宽文本搜索与正则表达式匹配您的编码风格。 类似于"( *this +" (添加了第一个可选空格以获得一些错误的容忍)。