1

ASP.Net MVC コントローラーに次のコードがあります。

public ActionResult GetAnimals()
{
    List<Dog> dogs = GetDogs("api/dogs).Result;
    List<Cat> dogs = GetCats("api/cats).Result;
    List<Horse> dogs = GetCats("api/cats).Result;
...
...
}


private async Task<List<Dog>> GetDogs(string requestUri)
{
    String ret = "";
    var client = new HttpClient();
    client.BaseAddress = new Uri("http://theservice.com/");
    var response = client.GetAsync(requestUri).Result;

    if (response.IsSuccessStatusCode)
    {
        ret = await response.Content.ReadAsAsync<List<Dog>>();
    }
    else
    { }
    return ret;
}

private async Task<List<Cat>> GetCats(string requestUri)
{
    String ret = "";
    var client = new HttpClient();

    client.BaseAddress = new Uri("http://theservice.com/");
    var response = client.GetAsync(requestUri).Result;

    if (response.IsSuccessStatusCode)
    {
        ret = await response.Content.ReadAsAsync<List<Cat>>();
    }
    else
    { }
    return ret;
}

戻り値の型に応じて、Get メソッドを何度も書き換えないようにするにはどうすればよいですか。賢い方法があるに違いない!

4

1 に答える 1

3

ジェネリックを使用する:

private async Task<List<T>> GetItems<T>(string requestUri)
{
    String ret = "";
    var client = new HttpClient();

    client.BaseAddress = new Uri("http://theservice.com/");
    var response = await client.GetAsync(requestUri);

    if (response.IsSuccessStatusCode)
    {
        ret = await response.Content.ReadAsAsync<List<T>>();
    }
    else
    { }
    return ret;
}

GetDogs/GetCatsメソッド内で使用できます。

private async Task<List<Dog>> GetDogs(string requestUri)
{
    return GetItems<Dog>(requestUri);
}

または直接としてGetItems<ClassName>(requestUri)

于 2013-09-13T09:23:09.027 に答える