Domanda

Se ha una serie di classi che implementano tutte un'interfaccia.

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

Voglio inserirli tutti in un elenco ed enumerarli.

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

ma il compilatore vuole sapere cos'è T. Posso farlo? Come posso superare questo problema?

È stato utile?

Soluzione

Non esiste un tipo di IMyinterface, esiste solo un tipo di IMyinterface`1 che richiederà un argomento di tipo. È possibile creare un tipo di interfaccia IMy: -

interface IMyinterface { ... }

quindi eredita da esso

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

Dovresti spostare tutti i membri che desideri utilizzare nel ciclo foreach nella definizione IMyinterface.

Altri suggerimenti

Se prevedi di invocare un metodo con T nella firma, la risposta è che non puoi. Altrimenti puoi fare come suggerisce anthonywjones

Devi ancora dire al compilatore che cosa è T in qualche momento, ma solo quello che hai chiesto può essere fatto:

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

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top