Перечисление обобщений и интерфейсов
-
10-07-2019 - |
Вопрос
Если есть набор классов, которые все реализуют интерфейс. Р>
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){}