使用带约束的泛型时无法隐式转换类型

Cannot implicitly convert type when using generics with constraints

我正在尝试为 AutoMapper 创建自定义类型转换器,我的问题是“无法隐式转换类型

这是我的转换器代码:

public class StatusConverter<TValue> : ITypeConverter<string, Wrapper<TValue>> where TValue : Status
{
    public Wrapper<TValue> Convert(string source, Wrapper<TValue> destination, ResolutionContext context)
    {
        return Status.Create(source);
    }
}

错误发生在第 return Status.Create(source); 行,它说无法从 Wrapper<Status> 转换为 Wrapper<TValue>

我已将与此相关的所有其他 类 上传到此处: https://dotnetfiddle.net/iSr94S

但我的问题是: 为什么会出现此错误?我在方法 where TValue : Status 中设置了约束,因此 TValue 将是 Status 类型,为什么它会抱怨类型?

谢谢

正如我在评论中所说,这种行为的原因是 C# 中的 类 不支持变化,即 Wrapper<SomeStatusChild> 不是 Wrapper<Status>explained here,例如).如果您没有 Status 继承人,您可以这样做:

public class StatusConverter : ITypeConverter<string, Wrapper<Status>>
{
    public Wrapper<Status> Convert(string source, Wrapper<Status> destination, ResolutionContext context)
    {
        return Status.Create(source);
    }
}