使用泛型清理代码

时间:2015-11-10 23:36:55

标签: c# generics

我对Generics有点新,我遇到了这个问题,我有重复的代码,我正在努力清理。签名是不同的,但正在执行的代码是相同的,有没有办法传入泛型类型而不必在新签名中指定每种类型?

public JsonResult<JsonData> GetServiceData(Func<IServiceResponse<IEnumerable<Order>>> func)
{
    var response = func();
    var jsonDataContainer = Mapper.Map<JsonData>(response);

    var result = GetJsonResult(jsonDataContainer);

    return result;
}

public JsonResult<JsonData> GetServiceData(Func<IServiceResponse<List<int>>> func)
{
    var response = func();
    var jsonDataContainer = Mapper.Map<JsonData>(response);

    var result = GetJsonResult(jsonDataContainer);

    return result;
}

public JsonResult<JsonData> GetServiceData(Func<IServiceResponse<User>> func)
{
    var response = func();
    var jsonDataContainer = Mapper.Map<JsonData>(response);

    var result = GetJsonResult(jsonDataContainer);

    return result;
}

1 个答案:

答案 0 :(得分:3)

很难肯定地回答这个问题,因为你没有指定Mapper.Map的签名。

但是,如果Mapper.Map可以使用任何类型IServiceResponse<T>的{​​{1}},那么这将有效。

T