通过代码c#查找对类的所有静态引用

时间:2013-01-14 07:50:21

标签: c# reflection

我搜索一种显示类的所有静态出现的方法(类似于Visual Studio功能:查找所有引用)。

它应该仅通过代码而不是手动。

我想

  1. 仅列出具有特定属性的类
  2. 列出所有具有静态引用的类(查找表绑定到数据类)
  3. 我的第一步是列出我感兴趣的所有类型:

                var result = from t in assembly.GetTypes()
                             where t.IsDefined(typeof(TAttribute), inherit)
                             select t;
    
                return result.ToList();
    

    我遇到了第二步的问题。 我知道如何从课堂上找到属性....但是怎么可能反过来,找到一个阶级的所有用法?

2 个答案:

答案 0 :(得分:3)

您无法使用反射找到静态引用,这是AST可能知道的内容。为此,您可能希望使用:Roslyn(编译器即服务),让您编译并调查AST。

答案 1 :(得分:1)

您无法使用反射在方法体中找到引用,但您可以找到字段,属性和方法参数/返回值。

您已经知道如何为每种类型列出所有类型:

Type.GetProperties返回PropertyInfo数组,您可以检查`PropertyInfo.ProeprtType'是否在您关注的类型列表中。

Type.GetFields

的字段也是如此

对于调用Type.GetMethods的方法,这将返回MethodInfo个对象的数组,以获取您检查的返回类型MethodInfo.ReturnType以及参数call MethodInfo.GetParameters和{{ 1}}

只留下在方法体内定义的局部变量,并且无法使用反射访问