Question

Si vous avez un ensemble de classes qui implémentent toutes une interface.

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

Je veux les mettre tous dans une liste et les énumérer.

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

mais le compilateur veut savoir ce que T est. Puis-je faire ceci? Comment puis-je surmonter ce problème?

Était-ce utile?

La solution

Il n'y a pas de type IMyinterface, il n'y a qu'un type IMyinterface`1 qui nécessitera un argument de type. Vous pouvez créer un type IMyinterface: -

interface IMyinterface { ... }

puis en hériter

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

Vous devez déplacer les membres que vous souhaitez utiliser dans la boucle foreach vers la définition IMyinterface.

Autres conseils

Si vous envisagez d’appeler une méthode avec T dans la signature, la réponse est que vous ne pouvez pas. Sinon, vous pouvez le faire comme le suggère anthonywjones

Vous devez toujours indiquer au compilateur ce que T est à un moment donné, mais vous pouvez faire exactement ce que vous avez demandé:

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

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top