相关疑难解决方法(0)

无法从泛型类型转换为接口

我在尝试将通用对象添加到List <>时遇到错误.

它可能与协方差和逆变相关,但我不知道如何解决这个问题.我试图用T:IRegister来限制我的泛型类型.

我有一个接口来表示一个寄存器,然后是两个代表ByteRegister和DoubleWordRegister的类.

public interface IRegister
{
    string Name {get;set;}
}

 public class ByteRegister : IRegister
{
...
}

public class DoubleWordRegister : IRegister
{
...
}
Run Code Online (Sandbox Code Playgroud)

然后我有另一个类,它代表了所有相同类型的这些寄存器的块.

public class RegisterBlock<T> where T:IRegister
{
   private IList<T> _registers;

 ... constructors, properties etc

    public void AddRegister(T register)
    {
        _registers.Add(register);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后我有一个RegisterMap类,用于定义寄存器块列表和块内的每个寄存器.

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 …
Run Code Online (Sandbox Code Playgroud)

c# generics

7
推荐指数
2
解决办法
6118
查看次数

标签 统计

c# ×1

generics ×1