2015-11-10 30 views
2

我對泛型有點新,我遇到了這個問題,我有重複的代碼,我試圖清理。簽名是不同的,但執行的代碼是相同的,有沒有辦法傳入一個泛型,而不必在新的簽名中指定每個類型?清理帶有泛型的代碼

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; 
} 

回答

3

很難明確回答這個問題,因爲你沒有指定的Mapper.Map簽名。

但是,如果Mapper.Map可以採取IServiceResponse<T>任何類型T,那麼這將工作。

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

    var result = GetJsonResult(jsonDataContainer); 

    return result; 
}