方法中的反射获取变量

本文关键字:获取 变量 反射 方法 | 更新日期: 2024-09-25 16:28:16

如何获取方法中使用的变量,然后将其值写入控制台?

方法中的反射获取变量

您不能。反射不会扩展到读取方法变量的值。它只处理变量的声明元数据。即便如此,编译器也可能已经删除了您认为已声明的变量。反射允许完全访问字段(实例/静态类型变量),但不能访问方法变量。

有一些技巧可以像lambda表达式一样使用,但这会更改它们的形式(从方法变量到实例字段)。

我认为这是不可能的,但如果你挖掘IL代码并查看Method.Body。你可以了解所使用的临时局部变量。

但是很难区分时态和变量,因为所有的句法糖都已经消失了

更新:只是在搜索这个问题时发现了它。不确定它是否有效。

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