2012-04-12 4 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}"); // will write i = 42 –

+2

'LocalVariableInfo' 인스턴스에서 값을 가져올 수 없습니다. –

답변

-1

이 변수의 값이 메서드가 실행 된 후 손실 될 것입니다 방법에 지역 변수를 선언하면 (업데이트 실례 : 사실이 경우에는 그렇지 않습니다. 메서드 호출을 오버라이드했습니다. - 죄송합니다.). 실제로는 아무 것도 없기 때문에이 방법으로 값을 얻을 수있는 방법이 없습니다.

여러 방법의 변수를 재사용 할 경우

이의 필드 또는 속성을 만들 :

public class FooBarClass 
{ 
    private int _numberToReuse = 0; 

    public void Foo() 
    { 
     _numberToReuse = 10; 
    } 


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

귀하의 샘플 코드는 아주 사소한 보인다. 이 두 값을 막대에 전달하는 것이 가능하지 않습니까? bar(i, hello)처럼. 당신의 방법이 값 비싼 반사 방법을 호출 할만한 가치가 있는지 생각해보십시오.

+1

변수가 여전히 존재하고 스택에 있습니다. 범위를 벗어났습니다. '보통'그들에게 접근한다. 그들은 당신이 조사하기를 원하는 방법으로 불려지므로 아직 할당되지 않았습니다. – Servy

+0

죄송합니다. 즉시이 메서드 호출을 보지 못했습니다. –

관련 문제