我寻找一种方法来显示所有静态出现的类(类似于Visual Studio的功能:查找所有引用)。
只能通过代码,而不能手动。
I want to
- 只列出具有特定属性的类
- 列出所有有静态引用的类(查找表绑定到数据类)
我的第一步是列出所有我感兴趣的类型:
var result = from t in assembly.GetTypes()
where t.IsDefined(typeof(TAttribute), inherit)
select t;
return result.ToList();
我对第二步有问题。我知道如何找到属性…从一个班级。但是怎么可能反过来找到一个类的所有用法呢?
您无法使用反射找到静态引用,这是AST
可能知道的事情。为此,你可以使用:Roslyn(编译器即服务),它可以让你编译和调查AST。
使用反射不能在方法体中找到引用,但是可以找到字段、属性和方法参数/返回值。
您已经知道如何列出所有类型,现在为每个类型:
Type.GetProperties
返回PropertyInfo
的数组,您可以检查是否' PropertyInfo. properties '。ProeprtType'在您关心的类型列表中。
同样适用于Type.GetFields
对于调用Type.GetMethods
的方法,这将返回MethodInfo
对象的数组,要获得返回类型,请检查MethodInfo.ReturnType
,并调用MethodInfo.GetParameters
和ParameterInfo.ParameterType
的参数
这就只留下了在方法体内部定义的局部变量并且这些局部变量不能通过反射来访问