6

如何获取 Method 中使用的变量,然后将它们的值写在 Console 上?

4

2 回答 2

5

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

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

于 2012-08-04T08:39:07.423 回答
3

我认为这是可能的,但是如果您挖掘 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
于 2012-08-04T09:18:55.087 回答