Reflection Получить переменные в методе
Как я могу получить переменные, используемые в методе, которые затем я напишу их значения в консоли?
2 ответа
Ты не можешь. Отражение не распространяется на чтение значений переменных метода. Он обрабатывает только метаданные объявления переменных. И даже тогда компилятор мог удалить переменную, которую вы считали объявленной. Reflection обеспечивает полный доступ к полям (переменные экземпляра / статического типа), но не к переменным метода.
Есть трюки, которые вы можете использовать как лямбда-выражения, но это меняет их форму (из переменных метода в поля экземпляра).
Я не думаю, что это возможно, но если вы копаете IL-код и смотрите на Method.Body. Вы можете знать о временных, локальных переменных, используемых.
Но будет трудно отличить временные значения от переменных, потому что весь синтаксический сахар исчез
ОБНОВЛЕНИЕ: Jus во время поиска по этому вопросу нашел его. Не уверен, что это работает.
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