参数类型不能赋值给参数
本文关键字:参数 赋值 不能 类型 | 更新日期: 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>
中,因此这将不起作用。出于同样的原因,您不能转换列表或其他可变结构。
然而,对于IEnumerable
或IReadOnlyCollection
这样的不可变结构,这种转换将工作得很好。