Использование ограничений типа из унаследованного интерфейса дает неявную ошибку преобразования ссылки - PullRequest
0 голосов
/ 05 мая 2020

У меня есть ограничение типа

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 и еще несколько вещей.

1 Ответ

0 голосов
/ 05 мая 2020

Таким образом, способ исправить это - изменить сигнатуру ILookupable на ILookupable<out T>, но возникает другая проблема: что делать, мои методы должны возвращать тип интерфейса. Таким образом, это делает невозможным наличие метода с типом возвращаемого значения Task<T>.

Единственный обходной путь - это использование этой сторонней реализации ITask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...