Consider the following pseudo code:
TResult Foo(Func f, params object[] args)
{
TResult result = f(args);
This could become easy with lambda expressions:
TResult Foo(Func f)
{
TResult result = f();
return result;
}
Then usage coul be like:
var result = Foo(() => method(arg1, arg2, arg3));
Where method can be arbitrary method returning int.
This way you can pass any number of any erguments directly through lambda.