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?

Foi útil?

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){}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top