Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反射获取方法中的变量_C#_Reflection - Fatal编程技术网

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
只获取变量元数据(减去变量名称),而不获取变量本身的数据(请参阅)