我有一个类,我定义了一些公共属性(get和set)。在这个类中,有一些函数,我需要找到一种方法来判断一个给定的属性是否在类中设置,无论在哪里,只是被设置。
例如, 假设我们有一个名为P1的属性:
Public string P1
{
get;set;
}
现在我需要告诉这个属性是否在相等操作(值赋值)左侧的类中至少放置一次。
因此,如果此类中至少有一行具有: P1 =" blah bla ...",我需要得到答案。
这不是特定于类实例的东西,我需要一些遍历类代码的东西(可能是代码分析?)并为我检测这个。
我读到CodeDom,它似乎是构建/解析类文件的东西。我需要的是检查代码并提取它而不是构建文件。
答案 0 :(得分:1)
如果Roslyn不是一个选项,你可以使用反射来获取目标类的所有构造函数和方法(包括getter和setter),然后调用GetMethodBody().GetILAsByteArray()
来获取它们的MSIL代码,最后用于每个找到的赋值调用Module.ResolveMember(token)
来验证令牌是否代表您正在寻找的PropertyInfo。
答案 1 :(得分:0)
尝试获取当前的StackTrace。 然后你可以解析给定的数据。
private int t1;
public int T1
{
get { return t1; }
set
{
t1 = value;
Debug.WriteLine(new System.Diagnostics.StackTrace());
}
}