Шаблон запроса C#: запрос должен возвращать IEnumerable или один результат в универсальном интерфейсе

У меня есть интерфейс, который выполняет запрос на основе параметра запроса и результата запроса

public interface IQueryParam {}
public interface IQueryResult {}

public interface IQuery<in TQueryParam, out TResult>
  where TQueryParam : IQueryParam
  where TResult : IQueryResult
{
    TResult RunQuery(TQueryParam query);
}

public class GetBushCodes : IQuery<GetalBushCodesParam, ReturnBushCode[]>
{
  ReturnBushCode[] RunQuery(GetalBushCodesParam param) { /*TODO*/ }
}

Я хочу любой класс, который наследует от IQuery иметь возможность вернуть один экземпляр IQueryResult или IEnumerable или же Array из IQueryResult, Моя текущая настройка не позволит, и компилятор кричит на меня GetBushCodes:

The type 'System.Collections.Generic.IEnumerable<App.Domain.Queries.ReturnBushCode>' 
cannot be used as type parameter 'TResult' in the generic type or 
method 'App.Domain.Queries.IQuery<TQueryParam,TResult>'. There is no implicit 
reference conversion from 
'System.Collections.Generic.IEnumerable<App.Domain.Queries.ReturnBushCode>' to 
'App.Domain.Queries.IQueryResult'.

Я не хочу использовать настройки IQueryParam<TResult> where TResult : IQueryResult потому что это кажется ограничительным, и я хочу попытаться сохранить IQueryResult ограничение на IQuery так как GetBushCodes компилируется, если я избавлюсь от ограничения.

0 ответов

Другие вопросы по тегам