我的代码结构如下:
public interface ICode { }
public interface IPreparedCode<TCode>
where TCode : ICode { }
public interface ILayer<TPreparedCode>
where TPreparedCode : IPreparedCode<ICode> { }
public interface IContext<TCode, TPreparedCode, TLayer>
where TCode : ICode
where TPreparedCode : IPreparedCode<TCode>
where TLayer : ILayer<TPreparedCode> { }
并且我遇到错误“没有从TPreparedCode到IPreparedCode
答案 0 :(得分:0)
ILayer
的通用参数被约束为IPreparedCode<ICode>
,但是您赋予它的通用参数是TPreparedCode
,它被约束为IPreparedCode<TCode>
。注意区别吗? IPreparedCode<TCode>
无法转换为IPreparedCode<ICode>
。
要解决此问题,您可以在TCode
上添加一个额外的通用参数ILayer
,并将TPreparedCode
约束在IPreparedCode<TCode>
上。:
public interface ICode { }
public interface IPreparedCode<TCode>
where TCode : ICode { }
public interface ILayer<TPreparedCode, TCode>
where TCode : ICode
where TPreparedCode : IPreparedCode<TCode> { }
public interface IContext<TCode, TPreparedCode, TLayer>
where TCode : ICode
where TPreparedCode : IPreparedCode<TCode>
where TLayer : ILayer<TPreparedCode, TCode> { }