Шаблон запроса 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
компилируется, если я избавлюсь от ограничения.