2008-11-22 6 views
1

Si vous disposez d'un ensemble de classes implémentant toutes une interface. Je veux les mettre tous dans une liste et énumérer à travers eux.énumération des génériques et des interfaces

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

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

Répondre

7

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

interface IMyinterface { ... } 

puis hériter de ce

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

vous devez déplacer tous les membres que vous souhaitez utiliser dans la boucle foreach à la définition de IMyInterface.

1

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 faire comme anthonywjones suggère

1

Vous devez toujours indiquer au compilateur ce que T est à un moment donné, mais tout ce que vous demande peut être fait:

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

List<IMyinterface> list = new List<IMyinterface>(); 
foreach(IMyinterface a in list){} 
Questions connexes