我的代码具有以下结构:
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 的装箱转换或类型参数转换”。
最佳答案
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> { }