No se puede convertir de tipo genérico a interfaz
Recibo un error al intentar agregar un objeto genérico a una Lista <>.
Probablemente esté relacionado con la Covarianza y la Contravariedad, pero no estoy seguro de cómo solucionar esto. He intentado restringir mis tipos genéricos usandodonde T: IRegister.
Tengo una interfaz para representar un registro y luego dos clases que representan un ByteRegister y un DoubleWordRegister.
<code>public interface IRegister { string Name {get;set;} } public class ByteRegister : IRegister { ... } public class DoubleWordRegister : IRegister { ... } </code>
Luego tengo otra clase que representa un bloque de estos registros, todos del mismo 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>
Y finalmente tengo una clase RegisterMap que se utiliza para definir la lista de bloques de registro y cada registro dentro del bloque.
<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>
Sin embargo estoy recibiendo el siguiente error:
Error 20 Argument '1': cannot convert from 'RegisterBlock<ByteRegister>' to 'RegisterBlock<IRegister>'
en la línea _blocks.Add (block1) y similarmente en _blocks.Add (block2);