C# шаблонный возвращаемый тип без шаблонного класса

Пишу клиент API:

ApiRequest.cs:

public abstract class ApiRequest<T> : IApiRequest<T>
{
   #region Data Members

   private readonly Type _returnType;

   #endregion

   #region Properties

   public Type ReturnType
   {
      get
      {
         return _returnType;
      }
   }

   #endregion

   #region Constructor

   public ApiRequest()
   {
      _returnType = typeof( T );
   }

   #endregion

   public abstract HttpRequestMessage Build();

}

ApiResponse.cs:

public struct ApiResponse<T> : IApiResponse<T>
{

   #region Data Members 

   private readonly ApiRequest<T> _request;
   private readonly T _response;

   #endregion

   #region Properties

   public ApiRequest<T> Request
   {
      get
      {
         return _request;
      }
   }

   public T Content
   {
      get
      {
         return _response;
      }
   }

   #endregion

   public ApiResponse( ApiRequest<T> request, T response )
   {
      _request = request;
      _response = response;
   }

}

Учитывая, как расположены классы запроса и ответа, я хотел бы, чтобы клиент был полностью универсальным и имел функцию, возвращающую тип T запроса и ответа. Я сейчас пытаюсь:

public interface IApiClient
{
   IApiResponse<T> Request<IApiRequest<T>>( IApiRequest<T> request );
}

Однако мне не разрешено использовать T в сигнатуре метода, потому что для IApiClient она не предусмотрена. Как я могу обойти это, чтобы моему ApiClient не нужно было указывать тип возвращаемого значения?

Вы можете просто изменить подпись вашего метода Request на: IApiResponse <IApiRequest <T>> Request <T> (IApiRequest <T> request); Таким образом, сам тип не имеет привязанных к нему общих типов.

welrocken 10.08.2018 15:17
0
1
37
1

Ответы 1

Похоже, тебе нужно что-то подобное

public interface IApiClient
{
    IApiResponse<T> Request<T>(IApiRequest<T> request);
}

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