2016-05-22 129 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>),所以不需要再次指定該方法的約束。