2015-03-31 57 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

相關問題