2015-03-31 27 views
0

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

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

Public string P1 
{ 
    get;set; 
} 

现在我需要告诉我们,如果这个属性是在类中放置至少一次对等式运算的左侧(价值分配)。

因此,如果这个班级中至少有一行有: P1 =“blah bla ...”,我需要得到肯定答案。

这不是特定于类实例的东西,我需要通过类代码(代码分析可能?)的东西,并为我检测到这一点。

我阅读了CodeDom,看起来它是构建/解析类文件的东西。我需要的是查看代码并提取它,而不是构建文件。

+1

你可能想看看[Roslyn](https://github.com/dotnet/roslyn)。 – nvoigt 2015-03-31 11:46:22

+0

如果您在Visual Studio中,您可以右键单击“设置”;并点击查找用法。这会告诉你永远放置它的地方。 – 2015-03-31 12:03:24

+0

@nvoigt,我会检查Roslyn,但我的假设是它需要.NET 5,这是真的吗?或者我可以在.NET 4.0中使用它吗? – 2015-03-31 12:05:36

回答

0

尝试获取当前StackTrace。 然后你可以解析给定的数据。

private int t1; 
public int T1 
{ 
    get { return t1; } 
    set 
    { 
     t1 = value; 
     Debug.WriteLine(new System.Diagnostics.StackTrace()); 
    } 
} 
1

如果罗斯林是不是一种选择,你可以使用反射来获取所有构造函数和方法(包括getter和setter)目标类的,然后调用GetMethodBody().GetILAsByteArray()得到他们的MSIL代码,最后为每个发现任务请拨打Module.ResolveMember(token)来验证令牌是否代表您正在查找的PropertyInfo。

+0

我真的很感谢你的帮助。在我看来,这是一条路。非常感谢 ! – 2015-04-01 22:15:59

相关问题