2012-04-12 12 views
0

私は正しく何をしたいのかを説明する方法がわかりません。ここでは例^他の方法の変数へのアクセス方法

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

達成したいことは何ですか?あなたが正しい方向に進むかどうかは分かりません。 – empi

+0

私は単純に(またはそうでない)文字列フォーマッタを作成しようとします:int i = 24;書式( "i = {i}"); // i = 42を書く –

+2

'LocalVariableInfo'インスタンスから値を取得することはできません。 –

答えて

-1

あなたはこの変数の値は、メソッドが実行された後に失われようとしている方法でローカル変数を宣言した場合(更新のためにすみません:これは実際にはこの場合ではありません;私はメソッド呼び出しを上書きします - 申し訳ありません)。実際には何もないので、このメソッドから値を取得する方法はありません。

あなたは複数の方法で変数を再利用する場合

は、このためのフィールドまたはプロパティを作成します。

public class FooBarClass 
{ 
    private int _numberToReuse = 0; 

    public void Foo() 
    { 
     _numberToReuse = 10; 
    } 


    public void Bar() 
    { 
     DoSomething(_numberToReuse); 
    } 
} 

あなたのサンプルコードは非常に簡単になります。それらの2つの値をbarに渡すことは可能でしょうか? bar(i, hello)のように。あなたの方法が高価な反射方法を呼び出す価値があるかどうか考えてみてください。

+1

変数がまだ存在し、スタックに入っています。範囲外です。 「通常は」それらにアクセスします。彼らはまだあなたが検査したいものによって呼び出される方法にいるので、未割り当てではありません。 – Servy

+0

申し訳ありませんが、私はすぐにこのメソッド呼び出しを見たことがありません。 –

関連する問題