2016-05-22 9 views
0

Zum BeispielWie deklariert man eine generische Methode mit einer generischen Sammlung?

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

Ich habe zwei Fragen:

  1. Wenn es möglich ist, eine generische Methode mit einer generischen Sammlung zu erklären? Wenn das so ist, wie?
  2. Wie macht C eine bestimmte Member-Methode? Danke.
+3

(1) Wenn Sie meinen, ob Sie einen generischen Sammlertyp als Typargument verwenden können (d. H. "Liste '), dann lautet die Antwort: Ja, Sie können. (2) Sie müssen eine Schnittstelle deklarieren (die das Element enthält, das Sie erzwingen möchten) und eine Conversion-Typ-Einschränkung für C angeben (d. H. "Wo C: IContract") – chomba

Antwort

1

können Sie eine Schnittstelle verwenden, um die erforderlichen Elemente zu erzwingen:

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

Dann wird eine generische Methode kann wie so definiert werden:

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

Diese Schnittstelle ist bereits eine generische Sammlung (von extending ICollection<T>) so müssen Sie die Einschränkung für die Methode nicht erneut angeben.