我不知道如何解释我想要的正确。这是一个例子^
public void foo()
{
StackFrame trace = new StackFrame(1);
MethodBase method = trace.GetMethod(); //so, here we'll get bar-method info
MthodBody body = method.GetMethodBody(); //and here we'll get bar-method body
/*now i need get access to the local vars in bar
i know about MethodBody.LocalVariables
but i don't have any idea how i can get values of variables i and hello,
that defined in bar-method. I think it may be possible if i'll get
pointers to the vars,
and then copy it with Marshal.Copy*/
}
public void bar()
{
int i = 42;
string hello = "Hello!";
foo();
}
PS 我希望我的例子并不可怕,你明白我到底想要什么。 PPS 请原谅我糟糕的坏英语:)
答案 0 :(得分:0)
我想,你真正要做的是某种方法拦截(我认为你试图记录参数值或者类似的)。看看温莎城堡的PostSharp http://www.sharpcrafters.com/blog/post/Day-7-Interception-Aspects-e28093-Part-1.aspx或DynamicProxy。
答案 1 :(得分:-1)
如果在方法中声明 local 变量,则在执行该方法后该变量的值将会丢失( update: 在这种情况下它实际上不是;我重写了方法调用 - 抱歉)。没有办法从这种方法中获取价值,因为实际上并没有。
如果要在多个方法中重用变量,请为此创建字段或属性:
public class FooBarClass
{
private int _numberToReuse = 0;
public void Foo()
{
_numberToReuse = 10;
}
public void Bar()
{
DoSomething(_numberToReuse);
}
}
您的示例代码看起来非常简单。是不是可以将这两个值传递到bar中?像bar(i, hello)
一样。想想你的方式是否值得采用昂贵的反思方法。