首页 > 解决方案 > 使用继承接口的类型约束会导致隐式引用转换错误

问题描述

我有这种类型约束

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和更多的东西。

标签: c#constraintstype-constraints

解决方案


所以解决这个问题的方法是改变 to 的签名,ILookupable但这ILookupable<out T>会带来另一个问题,我的方法需要返回一个接口类型。所以这使得不可能有一个返回类型的方法Task<T>

唯一的解决方法是使用ITask.


推荐阅读