参数类型不能赋值给参数

本文关键字:参数 赋值 不能 类型 | 更新日期: 2023-09-27 17:54:25

我有一些继承链,从接口开始,以实际实现结束,经过几个步骤。

然而,这段代码是100%正确的

IBaseModel model = new ErrorModel();

但是当我尝试这样做的时候:

class MyContext: DbContext{
    public DbSet<ErrorModel> Errors {get; set}
}

DbSet<IBaseModel> set = new MyContext().Errors

this not working (未编译)并且说参数类型DbSet<ErrorModel>不能赋值给参数DbSet<IBaseModel>

有什么问题,如何解决?


UPD1:如果我使用基类而不是接口,它也不工作。像这样的代码

IQueryable<IBaseModel> tests = new MyContext().Errors 

也没有任何问题

参数类型不能赋值给参数

这不起作用,因为DbSet<Item>不是继承自DbSet<BaseItem>,它在逻辑上是完全不同的事情,因为DbSet<>是一个可变的结构。您可以将BaseItem添加到DbSet<BaseItem>中,但当然您不能将其添加到DbSet<Item>中,因此这将不起作用。出于同样的原因,您不能转换列表或其他可变结构。

然而,对于IEnumerableIReadOnlyCollection这样的不可变结构,这种转换将工作得很好。