我的代码具有以下结构:

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> { }

08-19 15:24