2012-08-04 178 views
3

如何获取方法中使用的变量,然后我将在控制台上编写它们的值?反射在方法中获取变量

+4

你有什么试过的?你看看[这个SO问题](http://stackoverflow.com/questions/11739096/determining-all-types-used-by-a-certain-type-in​​-c-sharp-using-reflection)? – 2012-08-04 08:35:52

+0

但它给了我他们的类型我需要他们的价值 – 2012-08-04 08:38:54

+5

他们只有在该方法的范围内的值。试图从方法之外获得“价值”是没有意义的。 – spender 2012-08-04 08:39:55

回答

4

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

您可以使用像lambda表达式这样的技巧,但是此将其形式更改为(从方法变量到实例字段)。

+0

有没有关于lambda表达式的例子? – 2012-08-04 08:43:45

+0

@Ufuk当然,也许看看http://stackoverflow.com/questions/671968/retrieving-property-name-from-lambda-expression – 2012-08-04 08:45:54

2

我不认为它是可能的,但如果你挖掘IL代码,并看看Method.Body。你可以知道使用的临时局部变量。

但因为所有的语法糖不见了

UPDATE将很难从变量区分临时工: 物权法,而在这个问题上搜索发现它。不知道它是否有效。

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 
+0

LocalVariables只获取变量元数据(减去变量的名称)而不是数据(参见https://msdn.microsoft.com/en-us/library/system.reflection.localvariableinfo(v=vs.110).aspx) – seebiscuit 2017-12-27 16:28:07