c# - 使用带有约束的泛型时无法隐式转换类型
问题描述
我正在尝试为 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>
例如,在此处解释)。如果你没有Status
继承人,你可以这样做:
public class StatusConverter : ITypeConverter<string, Wrapper<Status>>
{
public Wrapper<Status> Convert(string source, Wrapper<Status> destination, ResolutionContext context)
{
return Status.Create(source);
}
}
推荐阅读
- node.js - 在使用 node 和 puppeteer 获得页面响应后,如何找到某个是否存在?
- checkbox - 您如何防止 NVDA 将复选框读取为“未标记”?
- maven - GitHub 包:GitHub 组织的单个 Maven 存储库
- verilog - 无法理解 D 触发器代码中的错误
- c++ - unordered_map 对哈希函数的过度调用
- android - 无法在我的应用程序中集成缩放
- javascript - CodeMirror 突出显示特定的正则表达式匹配
- javascript - 提交尝试失败后保持模式表单打开
- python - Google Analytics API 仅返回“google / cpc”作为媒介?
- python - 将年份设置为 matplotlib 中的 x 标签