Перечисление обобщений и интерфейсов - PullRequest
1 голос
/ 22 ноября 2008

Если есть набор классов, которые все реализуют интерфейс.

interface IMyinterface<T>
{
    int foo(T Bar);
}

Я хочу поместить их всех в список и перечислить их.

 List<IMyinterface> list
 foreach(IMyinterface in list)
 // etc...  

но компилятор хочет знать, что такое T Я могу это сделать? Как я могу преодолеть эту проблему?

Ответы [ 3 ]

7 голосов
/ 22 ноября 2008

Нет типа IMyinterface, есть только тип IMyinterface`1, для которого потребуется аргумент типа. Вы можете создать тип IMyinterface: -

interface IMyinterface { ... }

потом наследуй от него

interface IMyinterface<T> : IMyinterface { ... }

Вам необходимо переместить все элементы, которые вы хотите использовать в цикле foreach, в определение IMyinterface.

1 голос
/ 22 ноября 2008

Вам все еще нужно сообщить компилятору, что такое T, но можно выполнить только то, что вы просили:

 interface IMyinterface
{
    int foo<T>(T Bar);
}

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
1 голос
/ 22 ноября 2008

Если вы планируете вызывать метод с T в подписи, ответ таков: вы не можете. В противном случае вы можете сделать так, как предлагает Антонийвон

...