2016-05-22 88 views
0

例如如何用泛型集合声明泛型方法?

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

我有两个问题:

  1. 如果有可能宣布与泛型集合泛型方法?如果是这样,怎么样?
  2. 如何让C有一个特定的成员方法? 谢谢。
+3

(1)如果您的意思是您是否可以使用泛型集合类型作为类型参数(即'List '),那么答案是肯定的。 (2)您需要声明一个接口(包含要执行的成员),并在C上指定转换类型约束(即'where 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>),所以不需要再次指定该方法的约束。