反射获取方法中的变量

时间:2012-08-04 08:33:31

标签: c# reflection

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

2 个答案:

答案 0 :(得分:5)

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

你可以使用像lambda表达式那样的技巧,但是这个改变了它们的形式(从方法变量到实例字段)。

答案 1 :(得分:3)

我认为不可能,但是如果你挖掘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