繁体   English   中英

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

[英]How I can find all extension methods in solution?

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

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

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

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

我将使用反射查看生成的程序集; 使用[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM