使用带约束的泛型时无法隐式转换类型
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);
}
}
我正在尝试为 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);
}
}