c# - 使用继承接口的类型约束会导致隐式引用转换错误
问题描述
我有这种类型约束
where TLookup : ILookupable<ILookup>
我正在为类型传递这个接口
public interface IEmployeeProxy : ILookupableCode
你在哪里
public interface ILookupableCode : ILookupable<ILookupCode>
和
public interface ILookupable<T> where T : ILookup
{
Task<IEnumerable<T>> LookupByNameAsync(string name, int take = 5, int skip = 0);
Task<T> LookupByIdAsync(long id);
}
和
public interface ILookupCode : ILookup
但我得到了There is no implicit reference conversion
错误,我不知道为什么,因为对我IEmployeeProxy
来说
IEmployeeProxy
=> ILookupableCode
=> ILookupable<ILookupCode>
=>ILookupable<ILookup>
我在这里做错了什么?为什么我会收到此错误?对我来说看起来我应该工作。
如果您想知道我为什么要这样做,是因为我想拥有ILookupable
一些返回的方法ILookup
,但也拥有ILookupableCode
相同的ILookupable
返回方法ILookupCode
和更多的东西。
解决方案
所以解决这个问题的方法是改变 to 的签名,ILookupable
但这ILookupable<out T>
会带来另一个问题,我的方法需要返回一个接口类型。所以这使得不可能有一个返回类型的方法Task<T>
。
唯一的解决方法是使用ITask
.
推荐阅读
- c# - 如何计算 DataGridView 中列的总和
- wordpress - 为 cmb2 实现 cmb_field_map
- java - JAVA GSON日期转换器:如何将午夜作为00:00 AM而不是12:00 AM
- angular - 如何使用 IdentiyServer 4 验证 LDAP 服务,
- ionic-framework - Ionic App - 构建失败,“支持的最低 Gradle 版本为 4.4”
- python-3.x - PySpark:如何从 spark 数据框创建嵌套的 JSON?
- spring-boot - 带有可选参数的 dynamodb 查询过滤器
- c# - windows 8.1 app后台任务重启后无法工作
- sql - 在 postgres 中将 jsonb 转换为常规数组
- xml - 如何在 Odoo 10 的 Qweb 标头中获取 report_name?