首页 新闻 会员 周边

在.Net反射中如何获取调用参数的值?

0
悬赏园豆:20 [已解决问题] 解决于 2012-03-20 11:03

我想写一个通用的处理函数跟踪方法的调用情况,即记录指定方法调用时各个参数的传递情况:

public void MyMethod(相关参数定义)
{
TraceMethod(MethodBase.GetCurrentMethod() as MethodInfo);
}

void TraceMethod(MethodInfo method)
{

XElement root = new XElement("root");
foreach(ParameterInfo in method.GetParameters())
{
if(info.IsOut)
{
continue;
}
root.Add(new Element(info.Name, info.Value));
}
}


请问该通过怎样的手段获取上述info.Value?

无之无的主页 无之无 | 大侠五级 | 园豆:5095
提问于:2012-03-09 16:36
< >
分享
最佳答案
0

你在TraceMethod里只传入了MethodInfo,这里只包含了参数的定义信息。你这么想,假设你有个方法:

class A
{
public void M(string s) { }
}

这个时候你可以得到M的参数s的ParameterInfo,但是这个时候它根本没有值(也不应该有),它的值只有当你去调用这个方法时才确定。而只有MethodInfo/ParameterInfo是不行的。你这里可以给TraceMethod加个参数:

void TraceMethod(MethodInfo method, params object[] parameters)

然后在MyMethod里调用它的时候把MyMethod的参数都传过去。


收获园豆:15
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-03-09 16:54

如果是这样,也就不会有这个问题了。我是希望能主动的获取,而不是被动的把参数传递过来。

无之无 | 园豆:5095 (大侠五级) | 2012-03-09 17:09

我的目的,其实也就是如何在一个函数被调用的时候,获取当前这个函数的调用环境。

无之无 | 园豆:5095 (大侠五级) | 2012-03-09 17:10

@笨笨蜗牛: 那你只能用AOP的方式,根据上下文去获取到值。园子里讲各种AOP实现的文章很多,自己搜一下吧。不过代价都比较大,除非用现成的编译期注入AOP框架如POST SHARP。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-03-09 17:12
其他回答(2)
0
無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-09 16:56
0
MethodBase.GetCurrentMethod()不反映调用方法时使用的类型参数,所以你就不能从MethodInfo 中获取到调用方法时使用的参数值,只能想办法传进TraceMethod方法中去。
收获园豆:5
LCM | 园豆:6876 (大侠五级) | 2012-03-09 17:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册