genéricos e interfaces de enumeração
-
10-07-2019 - |
Pergunta
Se tiver um conjunto de classes que todos implementar uma interface.
interface IMyinterface<T>
{
int foo(T Bar);
}
Eu quero empurrá-los todos em uma lista e enumerar através deles.
List<IMyinterface> list
foreach(IMyinterface in list)
// etc...
mas o compilador quer saber o que T é. Posso fazer isso? Como posso superar esse problema?
Solução
Não há nenhum tipo IMyInterface existe apenas um tipo IMyinterface`1 o que exigirá um argumento de tipo. Você poderia criar um tipo IMyInterface: -
interface IMyinterface { ... }
então herdar it
interface IMyinterface<T> : IMyinterface { ... }
Você precisa mover quaisquer membros que você gostaria de usar no loop foreach para a definição IMyInterface.
Outras dicas
Se você pretende invocar um método com T na assinatura, a resposta é que você não pode. Caso contrário, você pode fazer como AnthonyWJones sugere
Você ainda precisa dizer ao compilador que T é, em algum momento, mas apenas o que você perguntou pode ser feito:
interface IMyinterface
{
int foo<T>(T Bar);
}
List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}