2011-09-21 6 views
1

, 당신은 배열로 메소드의 정의 된 변수를 얻을 수 있습니다 :C# 정의 된 변수를 목록으로 - 가능합니까? PHP에서

function test($a,$b){ 
    print_r(
     get_defined_vars() 
); 
} 

는 C#으로 할 수 있습니까?

+0

당신은 정교 할 수 있습니까? – Scott

+0

[get_defined_vars] (http://php.net/manual/en/function.get-defined-vars.php)는 인수 및 전역 변수를 포함하여 현재 범위의 모든 변수를 반환합니다. 고맙게도 C#은 아무 것도 비슷하지 않습니다. 실제로 "범위"는 컴파일 타임이나 PHP에서와 같은 방식으로 런타임에 존재하는 것이 아닙니다. 너 정확히 뭘 하려구? 아마도 그것을 할 수있는 좋은 방법이 있습니다 ... – Kobi

+0

@ Kobi - 나는 많은 매개 변수를 가진 WebService 메소드를 가지고 있습니다. 나는 이것을 웹 서비스 인 경우 목록으로 transffer하고 외부에서 유효성을 검사하려고합니다. 나는 그 (것)들을 다시 또 다시 선언하고 싶지 않다. Toda – SexyMF

답변

2

리플렉션을 사용할 수 있습니다. 이 인라인을 수행 할 경우

, 당신은 먼저 현재있는 방법을 결정해야

var currentMethod = System.Reflection.MethodInfo.GetCurrentMethod(); 

그런 다음 해당 메서드의 매개 변수를 검색 할 수 있습니다.

foreach(ParameterInfo parameter in currentMethod.GetParameters()) 
{ 
    var name = parameter.Name; 
    //... 
} 
+0

get_defined_vars()는 메소드 매개 변수를 포함하지만 이에 국한되지 않습니다. –

+0

Idd는 호출 된 범위 내에서 변수를 가져옵니다 (http://be2.php.net/manual/en/function.get-defined-vars.php). OP의 질문을 보면 현재의 방법의 매개 변수를 얻는 것이 충분합니다. –

3

뭔가 like ...

string a = "hello"; 
int b = 20; 
DateTime c = DateTime.Now; 

foreach (LocalVariableInfo variable in MethodInfo.GetCurrentMethod().GetMethodBody().LocalVariables) 
{ 
    Console.WriteLine(variable); 
} 
+0

변수의 이름과 값까지 포함하지 않고, IEnumerator 및 변수 컬렉션과 같은 추가 변수를 가질 수있는 컴파일 된 코드를 참조합니다. – Kobi

+0

+1; 메서드 매개 변수를 추가 할 수도 있습니다, [ala Christophe 's answer] (http://stackoverflow.com/questions/7495903/c-defined-variables-in-a-method-as-a-list-is-it- 가능/7495977 # 7495977). –