2016-11-05 91 views
-1

我正在尋找使用函數委託調用具有參數的方法的方法。具有參數的函數代表c#

您可以使用函數delegate而不是調用processOperationB。但尋找可以實現以下方法的任何方式。

public class Client 
{ 

    public AOutput OperationA (string param1, string param2) 
    { 
    //Some Operation 
    } 

    public BOutput OperationB(string param1, string param2) 
    { 
     //Some Operation 
    } 
} 


public class Manager 
{ 
    private Client cl; 



    public Manager() 
    { 
     cl=new Client(); 
    } 


    private void processOperationA(string param1, string param2) 
    { 

     var res = cl.OperationA(param1,param2); 
     //... 

    } 

    private void processOperationB(string param1, string param2) 
    { 
     var res = cl.OperationB(param1,param2); 

     // trying to Call using the GetData , in that case I could get rid of individual menthods for processOperationA, processOperationB 

     var res= GetData<BOutput>(x=> x.OperationB(param1,param2)); 
    } 


    // It could have been done using Action, but it should return a value 
    private T GetData<T>(Func<Client,T> delegateMethod) 
    { 

    // how a Function delegate with params can be invoked 
    // Compiler expects the arguments to be passed here. But have already passed all params . 

     delegateMethod(); 


    } 

} 
+2

好的,那個代碼有什麼問題?你有錯誤嗎?什麼錯誤? – JLRishe

+0

目前還不清楚你在做什麼......爲什麼會調用'GetData'的目的是直接執行代碼...... – Phil1970

回答

2

您的評論寫道:

編譯器預期的論點在這裏

傳遞但是,這不是真的。是的,它期望一個論點,但不是你期望的。

您的delegateMethod參數是一個Func<Client, T>,這意味着它需要一個類型爲Client的參數,並返回值爲T的值。根據您所顯示的代碼,則應該這樣寫:

private T GetData<T>(Func<Client,T> delegateMethod) 
{ 
    return delegateMethod(cl); 
} 

這是我不清楚你試圖解決更大的問題是什麼。我沒有看到GetData<T>()方法在這裏添加任何東西;呼叫者可以在每種情況下調用適當的「Operation ...」方法,我想(即如在您的processOperationA()方法中)。

但至少我們可以解決編譯器錯誤。如果您想要解決更廣泛的問題,可以發佈一個新問題。確保包含一個很好的Minimal, Verifiable, and Complete code example,它清楚地顯示你正在嘗試做什麼,並準確解釋你已經嘗試了什麼,哪些不起作用。