gpt4 book ai didi

c# - 如何获取调用方法的参数值?

转载 作者:IT王子 更新时间:2023-10-29 04:38:41 24 4
gpt4 key购买 nike

问题

我正在编写一些代码,需要能够从调用类的方法中获取参数的。我知道如何一直到 ParameterInfo[] 数组,但我不知道如何获取值。这可能吗?

如果是,我认为这与使用 MethodInfo 对象中的 MethodBody 属性有关,它允许您检查 IL 流,包括属性,但我不知道该怎么做,而且我还没有' 在 Google 上找到适用的代码。

代码

// Finds calling method from class that called into this one
public class SomeClass
{
public static void FindMethod()
{
for (int i = 1; i < frameCount; i++)
{
var frame = new StackFrame(i);
var methodInfo = frame.GetMethod();
if (methodInfo.DeclaringType != this.GetType())
{
string methodName = frame.GetMethod().Name;
var paramInfos = methodInfo.GetParameters();

// Now what?? How do I get the values from the paramInfos

break;
}
else if (i == frameCount - 1)
{
throw new TransportException("Couldn't find method name");
}
}
}
}

最佳答案

如果不自己反省堆栈就无法做到这一点(这很脆弱,因为许多优化可能意味着堆栈框架不是您所期望的,甚至传递的参数实际上不是方法签名所建议的(它是优化 JIT 编译器完全有可能发现您只使用了对象/结构的子字段并传递它)。

ParameterInfo 只是告诉您编译时方法的签名,而不是传递的值。

自动实现这一目标的唯一现实方法是通过代码注入(inject)(通过 AOP 之类的东西)来创建数据并根据分析 IL 用它做你想做的事。

这通常不是一个好主意,如果您需要调试某些东西,请使用调试器,如果您需要记录一些东西,请明确说明您正在记录的内容。

明确地说,简单的反射技术不能完全通用地实现您想要的

关于c# - 如何获取调用方法的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/492600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com