enumeración de genéricos e interfaces
-
10-07-2019 - |
Pregunta
Si tiene un conjunto de clases que implementan una interfaz.
interface IMyinterface<T>
{
int foo(T Bar);
}
Quiero incluirlos a todos en una lista y enumerarlos.
List<IMyinterface> list
foreach(IMyinterface in list)
// etc...
pero el compilador quiere saber qué es T. ¿Puedo hacer esto? ¿Cómo puedo superar este problema?
Solución
No hay un tipo IMyinterface, solo hay un tipo IMyinterface`1 que requerirá un argumento de tipo. Podría crear un tipo de interfaz IM: -
interface IMyinterface { ... }
luego hereda de ella
interface IMyinterface<T> : IMyinterface { ... }
Debería mover cualquier miembro que quiera usar en el bucle foreach a la definición de interfaz IM.
Otros consejos
Si planea invocar un método con T en la firma, la respuesta es que no puede hacerlo. De lo contrario, puede hacer lo que anthonywjones sugiere
Todavía necesita decirle al compilador qué es T en algún momento, pero solo se puede hacer lo que pidió:
interface IMyinterface
{
int foo<T>(T Bar);
}
List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}