2013-08-03 2 views
0

다음 메서드가 3 개있는 경우 C# 을 사용하여 매개 변수 수가 다른 경우에도 모든 메서드의 매개 변수 값을 가져 오려고합니다.숫자 또는 유형에 관계없이 메서드의 매개 변수 값 가져 오기 C#

public void method1 (string param1) 
{ 
    List<string> parametervalues = getParameters(this.Method); 
} 
public void method2 (int param1, string param2) 
{ 
    List<string> parametervalues = getParameters(this.Method); 
} 
public void method3 (string param1, int param2, bool param3) 
{ 
    List<string> parametervalues = getParameters(this.Method); 
} 

그래서 getParameters 메소드에서 메소드 이름을 가져 와서 매개 변수의 수에 관계없이 매개 변수 값이있는 문자열 목록으로 리턴합니다.

는 난 다음

var method = MethodInfo.GetCurrentMethod(); 
var parameters = method.GetParameters(); 
List<string> parameterList = new List<string>(); 
if (parameters.Length > 0) 
{ 
    foreach (var p in parameters) 
    { 
     parameterList.Add(p.Name); 
    } 
} 

UPDATE와 같은 변수의 수 있지만 값없이 얻을 수있는 지점에 도달 : I를 이용하여 다른 방법을 발견

을 (PARAMS 오브젝트 []의 값) 다음과 같은 메서드 매개 변수로

method1(string a, string b, string c) 
{ 
list<string> = getParameterasList(a,b,c); 
} 

getParameterasList(params object[] values) 
{ 
      List<string> parameterList = new List<string>(); 
      if (values.Length > 0) 
      { 
       foreach (var v in values) 
       { 
        parameterList.Add(v.ToString()); 
       } 
      } 
return parameterList; 
} 
+1

당신은 반사를 통해 * 매개 변수의 * 값을 얻을 수 없습니다. –

+1

다른 방법을 사용하여 값을 가져 오는 방법은 반사입니까? – msytNadeem

+0

제 지식은 아니요. –

답변

0

interception을 사용하면됩니다. 경고 :이를 이해하고 이해하고 올바르게 구현하는 데는 시간이 걸립니다. 일단 인터셉트 콜의 기본 사항을보고 구현할 수 있다면, 메소드 매개 변수의 값을 얻을 수 있습니다.

요컨대, 가로 채기는 메서드 호출을 가로 채고 호출하기 전에 수행 할 작업을 수행 한 다음 실제로 호출을 허용 한 다음 호출 할 때 호출 할 수있는 기회를 얻습니다 발신자에게 다시 알려줘.

전체 예제를 여기에 표시하기는 어려울 지 모르지만 그 링크를 따라 가면 괜찮을 것입니다. 인터셉터를하는 동안 메소드에서 예외가 리턴 될 때 메소드 매개 변수의 값을 얻는 방법입니다. (당신은 당신이 필요로하는 정보를 가지고있는 IMethodCallMessage에 액세스 할 수 있습니다.) 우리는이 그래서 우리는 메소드 매개 변수를 기록 할 수 있습니다 않습니다

private static List<ParameterInformation> GetParameterInfoList(IMethodCallMessage methodCallMessage) 
    { 
     var = new List<ParameterInformation>(); 

     // Note: This works even if a parameter's value is null. 
     for(int i = 0 ; i < methodCallMessage.ArgCount ; i++) 
     { 
      parameterInformationList.Add(new ParameterInformation(methodCallMessage.GetArgName(i), methodCallMessage.Args[i])); 
     } 

     return parameterInformationList; 
    } 
+0

게시 한 링크가 "MSDN Magazine Issues"로 이동합니다 –

+1

4.5 년 전 아닙니다. –

관련 문제