I have a function of this sort
void func(params object[] parameters) {
//Function Body
}
It can accept parameters of the following sort
func(10, "hello", 30.0);
func(10,20);
and so on.
I wanted to create an Action
delegate for the above function. Is it possible? If not then why?
You can't use the existing Action
delegates with params
, but you can declare your own delegate that way:
public delegate void ParamsAction(params object[] arguments)
Then:
// Note that this doesn't have to have params, but it can do
public void Foo(object[] args)
{
// Whatever
}
...
ParamsAction action = Foo;
action("a", 10, 20, "b");
Of course you can create an Action<object[]>
for your existing method - but you lose the params
aspect of it, as that's not declared in Action<T>
. So for example:
public static void Foo(params object[] x)
{
}
...
Action<object[]> func = Foo;
func("a", 10, 20, "b"); // Invalid
func(new object[] { "a", 10, 20, "b" }); // Valid
So if you're calling the delegate from code which wants to use params
, you need a delegate type which includes that in the declaration (as per the first part). If you just want to create a delegate which accepts an object[]
, then you can create an instance of Action<object[]>
using a method which has params
in its signature - it's just a modifier, effectively.