У вас не может быть настраиваемых атрибутов для аргумента универсального типа (CLI не разрешает это), а компилятор C # реализует ключевое слово params
, создавая System.ParamArrayAttribute
в соответствующем параметре метода.
Это не позволяет вам использовать его с универсальными делегатами System.Func <...>, но вы всегда можете создать свой собственный тип делегата, который использует params
.
Вы не можете использовать params для любого параметра, кроме последнего ... это часть того, на что он жалуется.
Вы также не можете использовать params
в аргументе типа. Это не только для делегатов, но и в целом. Например, вы не можете написать:
List<params string[]> list = new List<params string[]>();
Однако вы можете объявить новый тип делегата следующим образом:
delegate void Foo(int x, params string[] y);
...
Foo foo = SomeMethod();
foo(10, "Hi", "There");
Обратите внимание, что преобразование группы методов должно соответствовать методу, который принимает строковый массив - вы не можете объявить SomeMethod как:
void SomeMethod(int x, string a, string b)
и, например, ожидать, что это сработает. Это должно быть:
void SomeMethod(int x, string[] args)
(Или, конечно, можно использовать сам params
.)