0

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

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

我想要

  1. 仅列出具有特定属性的类
  2. 列出对其具有静态引用的所有类(查找与数据类的表绑定)

我的第一步是列出我感兴趣的所有类型:

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

            return result.ToList();

我在第二步遇到问题。我知道如何从一个类中找到属性...。但是怎么可能反过来,找到一个类的所有用法呢?

4

2 回答 2

3

您无法使用反射找到静态引用,这是AST可能知道的。为此,您可能需要使用:Roslyn(编译器即服务),它可以让您编译和研究 AST。

于 2013-01-14T07:53:21.887 回答
1

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

您已经知道如何列出所有类型,现在针对每种类型:

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

字段也是如此Type.GetFields

对于您调用的方法Type.GetMethods,这将返回一个对象数组MethodInfo,以获取您检查的返回类型MethodInfo.ReturnType以及参数调用MethodInfo.GetParametersParameterInfo.ParameterType

这只留下定义在方法体内的局部变量,并且不能通过反射访问这些变量

于 2013-01-14T08:22:39.120 回答