c# - 如何重构返回 List 的 C# 代码?
问题描述
我发现我多次重复此代码,并且希望得到一些帮助以正确重构它。我将如何传递我希望从通话中返回的类型列表?
masterData.PatternData = await GetMeetingData();
masterData.PatternDataDays = await GetMeetingDays();
private async Task<List<MeetingPatternData>> GetMeetingData()
{
var retVal = new List<MeetingPatternData>();
try
{
var client = ClientFactory.CreateClient("ServerAPI");
retVal = await client.GetFromJsonAsync<List<MeetingPatternData>>("MeetingTimeManager/GetPatterns");
}
catch (AccessTokenNotAvailableException exception)
{
exception.Redirect();
}
return retVal;
}
private async Task<List<MeetingPatternDays>> GetMeetingDays()
{
var retVal = new List<MeetingPatternDays>();
try
{
var client = ClientFactory.CreateClient("ServerAPI");
retVal = await client.GetFromJsonAsync<List<MeetingPatternDays>>("MeetingTimeManager/GetDays");
}
catch (AccessTokenNotAvailableException exception)
{
exception.Redirect();
}
return retVal;
}
解决方案
变量部分是返回类型和 URI,所以如果你这样声明你的方法:
private async Task<List<T>> Get<T>(string requestUri)
{
try
{
var client = ClientFactory.CreateClient("ServerAPI");
return await client.GetFromJsonAsync<List<T>>(requestUri);
}
catch (AccessTokenNotAvailableException exception)
{
exception.Redirect();
}
return new List<T>();
}
然后你可以这样调用:
masterData.PatternData = await Get<MeetingPatternData>("MeetingTimeManager/GetPatterns");
masterData.PatternDataDays = await Get<MeetingPatternDays>("MeetingTimeManager/GetDays");
我已经删除了这部分:
var retVal = new List<MeetingPatternData>();
List
因为你不必要地分配了一个。
您可能还应该返回一个IEnumerable<T>
而不是List<T>
基于使用完成工作所需的最严格类型的理念,除非调用者需要操作返回的数据。
推荐阅读
- laravel - 如何使用@/xxxx/component.vue 导入vuejs 组件?
- clojure - 在 defquery 中访问列表
- android - 如何防止 Fiddler 导致应用出错
- google-bigquery - Bigquery“NOT IN”比较性能太慢
- ios - 如何在 Swift 中知道实际的互联网是否可用?
- django - 避免重新填充 django 数据库
- ionic3 - Ionic 3 - 播放从网站下载并存储在设备数据目录中的视频
- ios - cordova-sqlite-storage 插件与原生 iOS 框架的 sqlite 数据库冲突
- mysql - 具有相同 ID 但值不同的两行上的 CASE
- java - 带有 Spring boot jpa 错误的 SQL 服务器过程调用:“无法提取 OUT/INOUT 参数值”