2014-09-25 4 views
3

당신의 도움이 필요합니다.선택적 인수를 사용하여 메서드를 동적으로 호출하는 방법은 무엇입니까?

C#을 사용하여 다음을 수행 할 수 있습니까?

나는 방법

void SomeMethod(int p1 = 0, bool p2 = true, string p3 = "") 
{ 
    // some code 
} 

을 그리고 컴파일 타임에 인수의 알 수없는 번호로이 메소드를 호출 할 필요가있다. 런타임에 응용 프로그램은 XML (예를 들어)에서 인수에 대한 정보를로드하고 해당 인수를 사용하여 메서드를 호출해야합니다. XML 파일에는 0 ~ 3 개의 인수가 포함될 수 있습니다.

SomeMethod 메소드를 xml에서로드 된 알 수없는 인수와 함께 호출하는 방법은 무엇입니까?

은 변수로 당신에게 인수에

+0

3은 args의 최대 값입니다. 다른 args를 가진 함수 이름에서 같은 이름을 사용할 수 있기 때문에 3이 될 수 있습니다. – ZoomVirus

+0

Karl, 아니요, 3 인수가 예를 들어 있습니다. 그것은 10 또는 심지어 20 일 수 있습니다. –

+0

그냥 왜리스트가 없습니다 ,리스트 ,리스트 ...? – Paparazzi

답변

6

당신은 반사를 사용하여 수행 할 수 있습니다

  • 이 세 가지 매개 변수 유형을 통과 MethodInfo를 얻습니다.
  • 은 누락 된 각 매개 변수의
  • GetParameters()를 호출하여 런타임 매개 변수는
  • MethodInfo에서 매개 변수 메타 데이터 ParameterInfo\[\]를 얻 값을 구하는 HasDefaultValue을 확인하고
  • 배열에 기본 값의 배열을 추가 않는 경우 DefaultValue을 잡아 값이 전달됩니다. 세 개의 객체 배열을가집니다.
  • 결과 배열을 반사를 사용하여 얻은 방법으로 전달합니다.
+0

좋은 해결책. 이런 식으로해볼 게. 감사. –

+0

+1 ... 읽기 쉽고 리플렉션을 배우는 것이 좋지만 올바른 것은 'Type.Missing'을 인수로 전달하는 것입니다. - http://stackoverflow.com/questions/2421994/invoking-methods-with-optional-parameters-through -반사 –

0

읽기 감사 발견 얼마나 많은에 따라 것으로 someMethod를 호출합니다. 예를 들어, p1의 값이 유효한 경우 SomeMethod (p1)를 호출하십시오. p1과 p2, SomeMethod (p1, p2) ... 등등에 유효한 값.

+0

이것은 효과가 없을 것입니다. 왜냐하면 10 개의 인수가있는 경우 많은 조합을 "하드 코딩"해야하기 때문입니다. –

+0

오케이. 그것이 당신이 여러 가지 주장을 가지고 있다면 제가 궁금해 한 것입니다. 나는 dasblinkenlight이 제안하는 것이 그때 생각한다. –