代码分析,用于判断是否正在从类内部设置给定的类的属性

时间:2015-03-31 11:37:00

标签: c# .net compiler-construction code-analysis

我有一个类,我定义了一些公共属性(get和set)。在这个类中,有一些函数,我需要找到一种方法来判断一个给定的属性是否在类中设置,无论在哪里,只是被设置。

例如, 假设我们有一个名为P1的属性:

Public string P1
{
    get;set;
}

现在我需要告诉这个属性是否在相等操作(值赋值)左侧的类中至少放置一次。

因此,如果此类中至少有一行具有: P1 =" blah bla ...",我需要得到答案。

这不是特定于类实例的东西,我需要一些遍历类代码的东西(可能是代码分析?)并为我检测这个。

我读到CodeDom,它似乎是构建/解析类文件的东西。我需要的是检查代码并提取它而不是构建文件。

2 个答案:

答案 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());
     }
}