Общий в типе ограничения - PullRequest
       15

Общий в типе ограничения

4 голосов
/ 15 августа 2010

Я борюсь с некоторыми дженериками.Ниже приведены мои настройки:

interface I<T> { }

[...]
void Add<T>(T obj) where T : I<??> { }

Как я могу убедиться, что T в методе Add реализует I?

Ответы [ 2 ]

8 голосов
/ 15 августа 2010

Следующая подпись позволит Add принимать любые T, которые реализуют I<> с параметрами любого типа.

void Add<T,S>(T obj) where T : I<S> {
}

Недостатком использования этой сигнатуры метода является то, что вывод типа не срабатывает, и вы должны указать все параметры типа, что выглядит глупо:

blah.Add<I<int>, int>(iInstance);

Намного проще использовать подпись ниже:

void Add<T>(I<T> obj) {
}
1 голос
/ 15 августа 2010

Вам необходимо также передать параметр T для добавления.

void Add<TI, TAny>(TI obj) where TI : I<TAny>
...