2011-09-27 6 views
0

매개 변수로 두 개의 delegate을 허용하는 메서드가 있습니다. delegate의를 호출 할 때 내가 Method1에서 오류를 얻고있다여러 매개 변수에 일반 매개 변수를 전달하는 방법 2 일반 매개 변수가있는 대리자

method1(Delegate delegate1,Delegate delegate2,params Object[] parameters) 
{ 
    // There is lot of other code, I haven't put here. To make it clear. 
    string key = delegate1.DynamicInvoke(parameters); 
    object instance = delegate2.DynamicInvoke(parameters); 
    // Getting errors here, as parameters mismatch. 
} 

// Code from the Calling class 
// There are many other classes in my project, which are calling Method1, 
// but the number of parameters of method2 and method3 always vary. 
private string Method2(object[] paramsObject) 
{ 
    string key = string.Empty; 
    foreach (object obj in paramsObject) 
    { 
     key += obj.ToString() + "|"; 
    } 
    return key.Trim(new char[]{'|'}); 
} 

private object Method3(object[] paramsObject) 
{ 
    object object1 = paramsObject[0]; 
    object object2 = paramsObject[1]; 
    object object3 = paramsObject[2]; 
    object object4 = GetObjectUsingParameters(object1,object2,object3); 
    return object4; 
} 


Func<string, string, string> Method2Delegate = Method2; 
Func<object1,object2,object3,object4> Method3Delegate = Method3; 
//Calling Method1 
Method1(Method2Delegate,Method3Delegate,string str1,string str2,object object1,Object object2,Object object3); 

는 불일치 오류를 매개 변수.

결국 하나의 params 매개 변수를 메소드의 입력으로 사용할 수 있습니다.

알려 주시면 어떻게 매개 변수를 동일한 delegate에 바인딩 할 수 있습니까? 아니면이 문제를 어떻게 해결할 수 있습니까?

감사합니다.

+0

DynamicInvoke를 저장하는 대신 왜 사용하고 있습니까? – Kolja

답변

0

당신은 다음 서명으로 대리자를 만들어야합니다

delegate void MyCustomDelegate (params object[] params); 

그리고이 MyCustomDelegate 유형으로 Method2Delegate 및 Method3Delegate을 정의 할 수 있습니다.

+0

이렇게 위임을 선언하면 알려주시겠습니까? 호출하는 메서드의 매개 변수를 전달하는 방법은 무엇입니까? 또는 호출 코드는 어떻게되어야합니까? – user965291

0

무엇과 같이 그 일에 대해 :

method1(Func<object[],string> delegate1,Func<object[], object> delegate2,params Object[] parameters) 
{ 

// There is lot of other code, I haven't put here. To make it clear. 

    string key = delegate1(parameters); 

    object instance = delegate2(parameters); 
// Getting errors here, as parameters mismatch. 

} 

및 발신자 동적 호출 대표를 정의 할 필요가 없습니다 단지

Method1(Method2,Method3,string str1,string str2,object object1,Object object2,Object object3); 

이 방법에서.

+0

제게 알려 주실 수 있습니다. Method1에서 str1, str2는 Method2에서 사용하는 매개 변수이며 Object1, Object2, Object3은 Method3에서 사용하는 매개 변수를 어떻게 알 수 있습니까? – user965291

+0

method2의 문자열과 method3의 문자열을 사용 하시겠습니까? – Kolja

관련 문제