Question: I have a method that I call multiple times, but each time a different method with a different signature is called from inside. 

```
public void MethodOne()
{
//some stuff

*MethodCall();

//some stuff

}

```

So `MethodOne` is called multiple times, each time with a different `*MethodCall()`. What I'm trying to do is something like this :

```
public void MethodOne(Func<> MethodCall)
{
//some stuff

*MethodCall;

//some stuff

}

```

but the Methods that are called each have a different return type and different parameters. Is there a way to do this using Functors? If not, how would I go about doing this?

Thank you!

Answer: 
You best bet would be to use the non-generic `Action` type (or `MethodInvoker` would be the same), i.e.

```
public void MethodOne(Action callback)
{
    //some stuff

    if(callback != null) callback();

    //some stuff
}

```

From this you can call any method by wrapping it at the caller, i.e.

```
MethodOne(SimpleMethod); // SimpleMethod has no parameters and returns void
MethodOne(() => MoreComplexMethod(1, "abc")); // this one returns void
MethodOne(() => { MethodThatReturnsSomething(12); }); // anything you like

```

etc
You cannot call a function which requires parameters without supplying them, so the answer is "no, not possible"

Also, maybe you want the following:

```
void MethodOne(Action a)
{
    // some stuff
    a();
    // some stuff
}

... // somewhere in the code
MethodOne((Action)(() => { DoSomethingOther(1, 2, 3); }));
MethodOne((Action)(() => { DoSomethingEvenDifferent(1, 2, 3, 4, 5); }));

```