C# 反射获取方法中的变量
我怎样才能得到方法中使用的变量,然后我将把它们的值写在控制台上?您不能。反射不扩展到读取方法变量的值。它只处理变量的声明元数据。即使如此,编译器可能已经删除了您认为您声明的变量。反射允许完全访问字段(实例/静态类型变量),但不允许访问方法变量C# 反射获取方法中的变量,c#,reflection,C#,Reflection,我怎样才能得到方法中使用的变量,然后我将把它们的值写在控制台上?您不能。反射不扩展到读取方法变量的值。它只处理变量的声明元数据。即使如此,编译器可能已经删除了您认为您声明的变量。反射允许完全访问字段(实例/静态类型变量),但不允许访问方法变量 有一些技巧可以使用,比如lambda表达式,但是这改变了它们的形式(从方法变量变为实例字段)。我认为这是不可能的,但是如果你挖掘IL代码并查看method.Body。您可以了解所使用的临时局部变量 但是很难区分临时变量和变量,因为所有的语法糖分都消失了 更
有一些技巧可以使用,比如lambda表达式,但是这改变了它们的形式(从方法变量变为实例字段)。我认为这是不可能的,但是如果你挖掘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
你试过什么?你看了吗?但它给了我它们的类型我需要它们的值它们只有方法范围内的值。试图从方法外部获取“值”是毫无意义的。是否存在类似“methodreturning”的事件?我可以使用它?是否有关于lambda表达式的示例?@Ufuk当然,如果变量恰好位于using()构造中,可能会有所帮助?@crokusek不太可能,nope
LocalVariables
只获取变量元数据(减去变量名称),而不获取变量本身的数据(请参阅)