2017-01-26 2 views
0

I는 Action 대리자를 수용하고 여기에 도시 된 바와 같이 소정의 방법을 실행하는 방법이 :패스 동작 위임

public void ExpMethod(Action inputDel) 
{ 
    inpuDel(); 
} 

I는 다음과 같이 주어진있어서 상기 호출 할 수

ExpMethod(() => {/*do something that matters*/}); 

모든 것이 잘 작동합니다. 여태까지는 그런대로 잘됐다. 지금은 입력 매개 변수로 일반적인 Action 대리자를 취하는 방법을 갖고 싶어 - 같이 : 또한

public void ExpGenMethod(Action<string,int> inputDel) 
{ 
    // I don't know how to call the supplied delegate as it requires parameters 
} 

,이 방법이 ExpGenMethod 전화를 시도하고있다 :

ExpGenMethod(("Hi",1) => {/*do something that makes sense*/}); 

을하지만, 구문 오류를 보여줍니다. 이 경우 제네릭 작업 대리인을 사용하는 방법을 알려주십시오.

+1

을 - 그래서 당신을 기존 방법은 여전히 ​​작동해야하며''Hi ''와'1'은'=>'의 왼쪽에 있지 않습니다. –

+0

어떤 오류가 발생합니까? 정확한 메시지를 보여주십시오. – HimBromBeere

답변

2

대리자의 전체적인 점은 메서드에 대한 포인터를 갖는 것입니다. 선언되는 동안 매개 변수를 전달하면 무의미합니다.

대신이 작업을 수행해야합니다 : 대신 ExpGenMethod 내 경우, 대리자를 실행하는 방법을 내 대리자의 인수를 전달

public void ExpGenMethod(Action<string,int> inputDel) 
{ 
    inputDel("Hi", 1); 
} 

을 그리고 다음과 같이 호출 :

ExpGenMethod((x, y) => {/*do something that makes sense*/}); 

위임자를 실행할 때 x"Hi"y에서 1으로 평가됩니다.

0

(a,b) => {/*do something that matters*/}은 a 및 b가 호출 중에 지정 될 매개 변수임을 의미합니다. 여기서 당신은 상수를 사용하므로 () => { use "Hi"; use 1;}과 같은 것을해야합니다. 그러면 첫 번째 작업 예제로 되돌아 갈 것입니다.

당신이 CNA의 매개 변수를 전달하려면

은이 방법을 수행 발신자가 입력되지 매개 변수로, 람다의 몸 속으로 흡수해야 "입력"을 공급하는 경우

public void work() 
{ 
    ExpGenMethod((a) => {/*do something that matters*/}); 
} 

public void ExpGenMethod(Action<int> inputDel, int parameterToUse) 
{ 
    inputDel(parameterToUse); 
}