I'm looking for way to call Methods with Parameters using a Function Delegate.
You could use the function delegate in the place instead of calling processOperationB. but looking for any way that the below way can be achieved.
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();
}
}
Your comment reads:
But that's not really true. Yes, it expects an argument, but not what you think it expects.
Your
delegateMethodparameter is aFunc<Client, T>, which means it requires a single argument, of typeClient, and returns a value of typeT. Based on the code you've shown, you should write this instead:It is not clear to me what broader problem you're trying to solve is. I don't see the
GetData<T>()method adding anything here; the callers could just call the appropriate "Operation..." method in each case, I'd think (i.e. as in yourprocessOperationA()method).But at least we can solve the compiler error. If you'd like help with that broader problem, you can post a new question. Make sure to include a good Minimal, Verifiable, and Complete code example that shows clearly what you're trying to do, and explain precisely what you've tried and what's not working.