Não é possível converter de tipo genérico para interface
Estou recebendo um erro ao tentar adicionar um objeto genérico a uma List <>.
É provavelmente relacionado a Covariância e Contravarência, mas não tenho certeza de como contornar isso. Eu tentei restringir meus tipos genéricos usandoonde T: Irregistro.
Eu tenho uma interface para representar um registro e, em seguida, duas classes que representam um ByteRegister e um DoubleWordRegister.
<code>public interface IRegister { string Name {get;set;} } public class ByteRegister : IRegister { ... } public class DoubleWordRegister : IRegister { ... } </code>
Eu então tenho outra classe que representa um bloco desses registros do mesmo tipo.
<code>public class RegisterBlock<T> where T:IRegister { private IList<T> _registers; ... constructors, properties etc public void AddRegister(T register) { _registers.Add(register); } } </code>
E finalmente eu tenho uma classe RegisterMap que é usada para definir a lista de blocos de registradores e cada registro dentro do bloco.
<code>public class RegisterMap { private List<RegisterBlock<IRegister>> _blocks; public RegisterMap() { _blocks = new List<RegisterBlock<IRegister>>(); RegisterBlock<ByteRegister> block1= new RegisterBlock<ByteRegister>("Block1", 0); block1.AddRegister(new ByteRegister("Reg1")); block1.AddRegister(new ByteRegister("Reg2")); _blocks.Add(block1); RegisterBlock<DoubleWordRegister> block2= new RegisterBlock<DoubleWordRegister>("Block2", 10); block2.AddRegister(new DoubleWordRegister("Reg3")); block2.AddRegister(new DoubleWordRegister("Reg4")); block2.AddRegister(new DoubleWordRegister("Reg5")); _blocks.Add(block2); } } </code>
No entanto, estou recebendo o seguinte erro:
Error 20 Argument '1': cannot convert from 'RegisterBlock<ByteRegister>' to 'RegisterBlock<IRegister>'
na linha _blocks.Add (block1) e similarmente em _blocks.Add (block2);