Можно ли использовать ключевое слово параметрических усилителей в делегате?

  • Выбор - все в файле разработчика и удаляют все в файле, оставляя его незаполненный и затем сохраняют
  • Выбор - все в файле ASPX/ASCX и сокращают все и затем повторно вставляют его назад
  • , файл разработчика должен был повторно создать код
31
задан sl. 16 July 2009 в 09:37
поделиться

2 ответа

У вас не может быть настраиваемых атрибутов для аргумента универсального типа (CLI не разрешает это), а компилятор C # реализует ключевое слово params , создавая System.ParamArrayAttribute в соответствующем параметре метода.

Это не позволяет вам использовать его с универсальными делегатами System.Func <...>, но вы всегда можете создать свой собственный тип делегата, который использует params .

23
ответ дан 27 November 2019 в 21:58
поделиться

Вы не можете использовать 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 .)

46
ответ дан 27 November 2019 в 21:58
поделиться