如何在Method中使用变量,然后我将在Console上写下它们的值?
答案 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