Универсальный метод Task <object> - PullRequest
0 голосов
/ 02 мая 2019

У меня есть класс для использования моей REST услуги.

Метод для этого будет выглядеть следующим образом:

public async Task<object> Get(string controller)
    {
        object data;
        HttpResponseMessage response = await this.HttpClient.GetAsync(UrlService.BuildEndpoint(controller));

        if (response.IsSuccessStatusCode)
        {
            data = await response.Content.ReadAsAsync<object>();
            return data;
        }
        else
        {
            throw new Exception(); //todo
        }
    }

в этом случае object может быть как мой собственный класс(Project, User и т. Д.) С свойствами.

Мой вопрос в том, как сделать Task<object> методы универсальными, которые будут принимать объекты, которые я хочу (и возвращать)?

РЕДАКТИРОВАТЬ

Когда я делаю что-то вроде:

public async Task<TObject> Get<TObject>(string controller)
    {
        TObject data;
        HttpResponseMessage response = await this.HttpClient.GetAsync(UrlService.BuildEndpoint(controller));

        if (response.IsSuccessStatusCode)
        {
            data = await response.Content.ReadAsAsync<object>();
            return data;
        }
        else
        {
            throw new Exception(); //todo
        }
    }

я получаю сообщение об ошибке await repsonse.Contet...:

Невозможно безукоризненно преобразовать object в TObject ...

Ответы [ 3 ]

2 голосов
/ 02 мая 2019

Вы можете использовать универсальные типы:

public async Task<TObject> Get<TObject>(string controller)
    {
        TObject data;
        HttpResponseMessage response = await this.HttpClient.GetAsync(UrlService.BuildEndpoint(controller));

        if (response.IsSuccessStatusCode)
        {
            data = await response.Content.ReadAsAsync<TObject>();
            return data;
        }
        else
        {
            throw new Exception(); //todo
        }
    }

Посмотрите здесь и здесь для получения дополнительной информации;)

1 голос
/ 02 мая 2019

Будет работать следующий код:

public async Task<TObject> Get<TObject>(string controller)
{
    HttpResponseMessage response = await this.HttpClient.GetAsync(UrlService.BuildEndpoint(controller));

    if (response.IsSuccessStatusCode)
    {
        return await response.Content.ReadAsAsync<TObject>();
    }
    else
    {
        throw new Exception(); //todo
    }
}
0 голосов
/ 02 мая 2019

Вместо "объекта" используйте заполнитель типа "Т".

Попробуйте это:

  public async Task<T> Get (string controller)
  {
     T data;
     HttpResponseMessage response = await this.HttpClient.GetAsync (UrlService.BuildEndpoint (controller));

     if (response.IsSuccessStatusCode)
     {
        data = await response.Content.ReadAsAsync<T> ();
        return data;
     }
     else
     {
        throw new Exception (); //todo
     }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...