如何获取方法中使用的变量,然后我将在控制台上编写它们的值?反射在方法中获取变量
回答
你不能。反射不扩展到读取方法变量的值。它只处理变量的元数据声明。即使如此,编译器可能已经删除了你认为你声明的变量。反射允许完全访问字段(实例/静态类型变量),但不能访问方法变量。
您可以使用像lambda表达式这样的技巧,但是此将其形式更改为(从方法变量到实例字段)。
有没有关于lambda表达式的例子? – 2012-08-04 08:43:45
@Ufuk当然,也许看看http://stackoverflow.com/questions/671968/retrieving-property-name-from-lambda-expression – 2012-08-04 08:45:54
我不认为它是可能的,但如果你挖掘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
LocalVariables只获取变量元数据(减去变量的名称)而不是数据(参见https://msdn.microsoft.com/en-us/library/system.reflection.localvariableinfo(v=vs.110).aspx) – seebiscuit 2017-12-27 16:28:07
- 1. 使用反射获取类变量值
- 2. 变量参数反射方法调用
- 3. 用Java反射调用变量方法?
- 4. 使用反射获取OrderBy方法
- 5. 使用反射获取方法描述
- 6. 通过反射获取阴影方法
- 7. Java,反射,获取类的方法
- 8. 使用反射获取类方法
- 9. C#反射,获取重载方法
- 10. 反射,从方法获取返回值
- 11. 使用Java反射类获取方法
- 12. 在运行时使用Dlang中的反射获取变量值
- 13. 从方法获取变量
- 14. 反射:在静态方法中获取调用对象
- 15. 获取变量在方法内工作
- 16. 反射超载。为反射可变参数值填充反射数组方法
- 17. c#反射改变属性的方法
- 18. C#反射,改变方法的主体
- 19. 是否可以通过反射获取局部变量?
- 20. Java反射:如何获取变量的名称?
- 21. 如何使用反射获取变量名称?
- 22. 通过反射获取字符串变量值
- 23. php:使用反射获取变量类型提示
- 24. 如何通过反射属性获取变量/字段名称?
- 25. 获取类的实例变量和使用反射
- 26. 无法获取父类调用子类方法 - 使用反射
- 27. 方法不反射
- 28. erb变量的反射
- 29. 反应:在变量内调用方法
- 30. 使用反射捕获方法状态
你有什么试过的?你看看[这个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
但它给了我他们的类型我需要他们的价值 – 2012-08-04 08:38:54
他们只有在该方法的范围内的值。试图从方法之外获得“价值”是没有意义的。 – spender 2012-08-04 08:39:55