перечисление дженериков и интерфейсов

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

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

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

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

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


person Johnno Nolan    schedule 22.11.2008    source источник


Ответы (3)


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

interface IMyinterface { ... }

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

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

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

person AnthonyWJones    schedule 22.11.2008

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

person krosenvold    schedule 22.11.2008

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

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

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
person KeesDijk    schedule 22.11.2008