2012-08-04 139 views
3

如何獲取方法中使用的變量,然後我將在控制檯上編寫它們的值?反射在方法中獲取變量

+4

你有什麼試過的?你看看[這個SO問題](http://stackoverflow.com/questions/11739096/determining-all-types-used-by-a-certain-type-in​​-c-sharp-using-reflection)? – 2012-08-04 08:35:52

+0

但它給了我他們的類型我需要他們的價值 – 2012-08-04 08:38:54

+5

他們只有在該方法的範圍內的值。試圖從方法之外獲得「價值」是沒有意義的。 – spender 2012-08-04 08:39:55

回答

4

你不能。反射不擴展到讀取方法變量的值。它只處理變量的元數據聲明。即使如此,編譯器可能已經刪除了你認爲你聲明的變量。反射允許完全訪問字段(實例/靜態類型變量),但不能訪問方法變量。

您可以使用像lambda表達式這樣的技巧,但是此將其形式更改爲(從方法變量到實例字段)。

+0

有沒有關於lambda表達式的例子? – 2012-08-04 08:43:45

+0

@Ufuk當然,也許看看http://stackoverflow.com/questions/671968/retrieving-property-name-from-lambda-expression – 2012-08-04 08:45:54

2

我不認爲它是可能的,但如果你挖掘IL代碼,並看看Method.Body。你可以知道使用的臨時局部變量。

但因爲所有的語法糖不見了

UPDATE將很難從變量區分臨時工: 物權法,而在這個問題上搜索發現它。不知道它是否有效。

System.Diagnostics.StackFrame stackFrame = new System.Diagnostics.StackFrame(); 
System.Reflection.MethodBase methodBase = stackFrame.GetMethod(); 

methodBase.GetParameters(); //Array of System.Reflection.ParameterInfo[] 
methodBase.GetMethodBody().LocalVariables; //List of Local variables declared in the body 
+0

LocalVariables只獲取變量元數據(減去變量的名稱)而不是數據(參見https://msdn.microsoft.com/en-us/library/system.reflection.localvariableinfo(v=vs.110).aspx) – seebiscuit 2017-12-27 16:28:07