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?

¿Fue útil?

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){}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top