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);

Respuestas a la pregunta(4)

Su respuesta a la pregunta