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

questionAnswers(4)

yourAnswerToTheQuestion