Can you use the params keyword in a delegate?

You can't have custom attributes on a generic type argument (the CLI doesn't permit it), and the C# compiler implements the params keyword by emitting the System.ParamArrayAttribute on the relevant method parameter.

This stops you from using it with the System.Func<...> generic delegates, but you can always create your own delegate type that does use params.


You can't use params for any parameter other than the last one... that's part of what it's complaining about.

You also can't use params in a type argument. This isn't just for delegates, but in general. For example, you can't write:

List<params string[]> list = new List<params string[]>();

You can, however, declare a new delegate type, like this:

delegate void Foo(int x, params string[] y);

...

Foo foo = SomeMethod;
foo(10, "Hi", "There");

Note that the method group conversion will have to match a method which takes a string array - you couldn't declare SomeMethod as:

void SomeMethod(int x, string a, string b)

and expect the above to work, for example. It would have to be:

void SomeMethod(int x, string[] args)

(Or it could use params itself, of course.)

Tags:

C#

.Net