为了账号安全,请及时绑定邮箱和手机立即绑定

由于没有隐式引用转换,无法将类型用作类型参数

由于没有隐式引用转换,无法将类型用作类型参数

C#
炎炎设计 2022-11-13 15:02:51
我正在尝试构建以下结构。编译器似乎不同意ServiceTicketModel可以隐式转换为Model<IEntity>. 为什么会这样,有什么办法可以绕过它?public abstract class ModelTest<TModel> where TModel : Model<IEntity>, new()public abstract class Model<TEntity> where TEntity : IEntitypublic class ServiceTicketModel : Model<ServiceTicket>public class ServiceTicket : Ticket, IEntitypublic 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>'
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

编译器是正确的......你需要子类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

{...}


查看完整回答
反对 回复 2022-11-13
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信