Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

interface IMyinterface { ... }

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

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

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

Другие советы

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

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

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

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top