2009-04-12 4 views
2

어떻게 C#에서 메서드 호출에 사용 된 변수의 이름을 결정합니까?메서드에 대한 매개 변수로 사용되는 변수의 이름을 결정하십시오.

예 :

public void MyTestMethod1() 
{ 
    string myVar = "Hello World"; 
    MyTestMethod2(myVar); 
} 

public void MyMethod2(string parm) 
{ 
    // do some reflection magic here that detects that this method was called using a variable called 'myVar' 
} 

내가 매개 변수가 항상 변수가되지 않을 수도 있음을 이해하지만 나는 그것을 사용하고있는 곳이 내가 dev에가 명시 적으로 친절을 진술 할 수 바라고 경우 일부 유효성 검사 코드에 그들이 유효성을 검사하는 값의 이름이고, 그렇지 않다면 메소드 이름을 var라는 이름에서 유추합니다.

+0

([C#에서 함수에 전달 된 변수 이름을 찾기]의 중복 가능성 http://stackoverflow.com/questions/72121/finding-the-variable-name- C-sharp 기능 통과) – nawfal

답변

4

불행히도, 불가능하지는 않더라도, 매우 어려울 것입니다. .

정확히 원래 보낸 변수의 이름이 필요한 이유는 무엇입니까?

사용되는 실제 변수가되지 않을 수도 있음을 기억하십시오 :이 경우

MyMethod2(myVar + "! 123"); 

는 myVar에는 값의 단지 부분을 보유하고, 나머지는 런타임에 식으로 계산된다.

+0

감사합니다 - 귀하의 답변에 대한 제 질문을 수정했습니다. – KevinT

1

변수는 의미있는 의미를 엔터티에 할당하는 편리한 식별자입니다. 프로그래밍 방식으로 설명하는대로 꽤 큰 코드 냄새처럼 보입니다. 게다가, 아는 것이 정말로 중요하다면, 두 번째 매개 변수를 전달할 수 없습니까?


편집 : 매개 변수가 항상 변수가되지 않을 수도 있음을 이해

,하지만 난 그것을 사용하고있는 장소 일부 검증에이 라인을 포함하는 자신의 질문을 업데이트 영업 이익은 code 내가 dev에 명시 적으로 그들이의 유효성을 검사하는 값의 친숙한 이름을 알릴 수 있기를 바란다. 그리고 그들이 그렇지 않다면 그들은 그 메소드를 호출 한 var의 이름에서 유추한다.

명시 적으로 상태를 표시하는 것이 중요하다면, 반드시 매개 변수로 함수에 전달되어야합니다.

6

방법이 있지만 꽤 추합니다. 당신이 볼 수 있듯이

public void MyTestMethod1() 
{ 
    string myVar = "Hello World"; 
    MyTestMethod2(() => myVar); 
} 

public void MyMethod2(Expression<Func<string>> func) 
{ 
    var localVariable = (func.Body as MemberExpression).Member.Name; 
    // localVariable == "myVar" 
} 

모든 통화는 람다로 포장되어야 할 것이다 당신이 외에 하나의 변수를 반환 람다에서 다른 작업을 수행하기 시작하면이 방법은 고장.

1

변수의 이름을 결정하는 대신 변수의 식별자로 열거 형을 사용해야하는 것처럼 들립니다. 변수의 요점은 비트를 나타내는 사람이 읽을 수있는 이름이라는 것입니다.

당신은 할 수 :

public void MyTestMethod1() 
{ 
    string myVar = "Hello World"; 
    MyTestMethod2(myVar, VariableType.MyVar); 
} 

public void MyMethod2(string parm, VariableType type) 
{ 
    if (type == VariableType.MyVar) 
    { 
    } 
} 
관련 문제