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.)