2016-05-22 11 views
0

НапримерКак объявить общий метод с общей коллекцией?

void f<C, T>(C<T> collection, T element) : where C has member method BindarySearch 

У меня есть два вопроса:

  1. Если можно объявить общий метод с общей коллекции? Если да, то как?
  2. Как сделать C определенным методом? Спасибо.
+3

(1) Если вы имеете в виду, можете ли вы использовать Generic Collection Type в качестве аргумента типа (например, «List '), тогда ответ «да» вы можете. (2) Вам нужно объявить интерфейс (содержащий член, который вы хотите применить), и указать ограничение типа преобразования на C (i.e 'где C: IContract') – chomba

ответ

1

Вы можете использовать интерфейс для обеспечения требуемых пользователей:

interface IHasBinarySearch<T> : ICollection<T> { 
    int BinarySearch(T item); 
} 

Тогда общий метод можно определить следующим образом:

void f<C, T>(C collection, T element) where C : IHasBinarySearch<T> 

Этот интерфейс уже общий сбор (по расширение ICollection<T>), поэтому нет необходимости снова указывать ограничение на метод.