C# 反射检查字段赋值的方法体
C# reflection to check method body of assignment to fields
下面的class:
class A
{
private List<int> intList;
private List<bool> boolList;
public InitializeClass()
{
intList = new List<int>();
}
}
我想使用反射来编写一个 linter/post 编译器,以检查某个方法是否真的对 class' 字段进行了任何赋值。目的是自动检查我自己的错误。 class 不能使用构造函数,所以我需要手动调用 InitializeClass()
。
我已经想检查 MethodInfo method
和 class FieldInfo[] fields
的所有字段,但不知道如何从这里开始。从上面的例子中,它应该能够检测到我没有在方法体中为boolList
分配任何东西。
我最终使用正则表达式直接读取了代码文件。
该文件有一些限制,即它可以包含无限的方法,但每个方法不能包含任何括号。 (没有如果等)
然后我使用 "({)(.*)(})"
并选择第二组来消除 class 的括号,然后我使用 "{(.*?)}"
并循环匹配每个方法的主体。 (实际上我不关心方法的名称,我想检查整个文件)之后我逐行读取方法的内容并用'='或'.'等字符拆分内容
下面的class:
class A
{
private List<int> intList;
private List<bool> boolList;
public InitializeClass()
{
intList = new List<int>();
}
}
我想使用反射来编写一个 linter/post 编译器,以检查某个方法是否真的对 class' 字段进行了任何赋值。目的是自动检查我自己的错误。 class 不能使用构造函数,所以我需要手动调用 InitializeClass()
。
我已经想检查 MethodInfo method
和 class FieldInfo[] fields
的所有字段,但不知道如何从这里开始。从上面的例子中,它应该能够检测到我没有在方法体中为boolList
分配任何东西。
我最终使用正则表达式直接读取了代码文件。 该文件有一些限制,即它可以包含无限的方法,但每个方法不能包含任何括号。 (没有如果等)
然后我使用 "({)(.*)(})"
并选择第二组来消除 class 的括号,然后我使用 "{(.*?)}"
并循环匹配每个方法的主体。 (实际上我不关心方法的名称,我想检查整个文件)之后我逐行读取方法的内容并用'='或'.'等字符拆分内容