c# - 由于没有隐式引用转换,不能使用类型作为类型参数
问题描述
我正在尝试构建以下结构。编译器似乎不同意ServiceTicketModel
可以隐式转换为Model<IEntity>
. 为什么会这样,有什么办法可以绕过它?
public abstract class ModelTest<TModel> where TModel : Model<IEntity>, new()
public abstract class Model<TEntity> where TEntity : IEntity
public class ServiceTicketModel : Model<ServiceTicket>
public class ServiceTicket : Ticket, IEntity
public class ServiceTicketModelTest : ModelTest<ServiceTicketModel>, IDisposable
错误在最后一课,消息是:
The type '...ServiceTicketModel' cannot be used as type parameter 'TModel' in the generic type or method 'ModelTest<TModel>'. There is no implicit reference conversion from '...ServiceTicketModel' to '...Model<IEntity>'
解决方案
编译器是正确的......您需要子类Model<IEntity>
化以满足where
您添加的约束TModel
,但您没有 - 您子类化Model<ServiceTicket>
where ServiceTicket : IEntity
。这不一样。
如果这是一个接口或委托定义,您有时可以使用变体修饰符 ( in
/ out
) 使其满意。但是你不能用类来做到这一点。
您可能需要使用:
public abstract class ModelTest<TModel, TEntity>
where TModel : Model<TEntity>, new()
where TEntity : IEntity
{...}
public class ServiceTicketModelTest
: ModelTest<ServiceTicketModel, ServiceTicket>
, IDisposable
{...}
推荐阅读
- django - Django 中的自定义分页无法正常工作
- python - Django 一直说字段是必需的,即使已经提供了字段
- c# - 野田时间和循环操作(c#)
- google-apps-script - Spreadsheet().insertSheet(index, name) 不会在索引处插入工作表,而是作为最后一个工作表
- android - 为什么设备上出现“无法确定位置”?
- python - Python 中的音频压缩器
- android - 未找到 OpenCv 管理器包
- python - 尝试在 Python 中使用条件初始化类变量
- swiftui - 'self' 在所有存储的属性被初始化之前使用错误 SwiftUI
- mongodb - 从 Robo 3T 连接到 MongoDB Atlas 时出现问题