2013-01-14 49 views
0

我搜索一種方法來顯示類的所有靜態發生(類似於Visual Studio功能:查找所有引用)。通過代碼c查找對一個類的所有靜態引用#

它應該只能通過代碼而不是手動。

我想

  1. 只列出類具有特定屬性的
  2. 一覽表中有靜態引用到它的所有類(查找表綁定到數據類)

我的第一個步驟是列出我感興趣的所有類型:

  var result = from t in assembly.GetTypes() 
         where t.IsDefined(typeof(TAttribute), inherit) 
         select t; 

      return result.ToList(); 

我在第二步出現問題。 我知道如何從課堂上找到屬性......但是怎麼可能倒過來找到一個班級的所有用途呢?

回答

3

使用反射,您無法找到靜態參考文獻,這是AST可能知道的。爲此,您可能要使用:Roslyn(編譯器即服務),讓我們編譯並調查AST。

1

您在使用反射的方法體中找不到引用,但可以找到字段,屬性和方法參數/返回值。

你已經知道如何列出所有類型,現在每種類型:

Type.GetProperties返回PropertyInfo一個數組,你可以檢查是否`PropertyInfo.ProeprtType」爲你關心的類型列表。

也是一樣的領域與Type.GetFields

對於你叫Type.GetMethods方法,這將返回MethodInfo對象的數組,讓你檢查MethodInfo.ReturnType的返回類型和參數調用MethodInfo.GetParametersParameterInfo.ParameterType

這只是留下方法體內定義的局部變量,並且不能用反射訪問

+0

我的答案主要問題是我主要搜索局部變量。 (例如,如果一個網格用特定類型初始化) – Offler

+0

@Offler Nir說:你不能使用反射來檢查方法體(例如搜索局部變量)。你需要以某種方式進行反編譯,或者像Tigran所說的那樣使用Roslyn。 –

相關問題