如何重构 returns 列表 <T> 的 C# 代码?
How do you refactor C# code that returns a List<T>?
我发现我多次重复这段代码,希望能得到一些帮助来正确地重构它。我将如何传递我希望从通话中返回的类型列表?
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;
}
变量部分是 return 类型和 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
不必要的。
您可能还应该 returning IEnumerable<T>
而不是 List<T>
基于使用完成工作所需的最严格类型的理念,除非调用者需要操纵 returned 数据。
我发现我多次重复这段代码,希望能得到一些帮助来正确地重构它。我将如何传递我希望从通话中返回的类型列表?
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;
}
变量部分是 return 类型和 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
不必要的。
您可能还应该 returning IEnumerable<T>
而不是 List<T>
基于使用完成工作所需的最严格类型的理念,除非调用者需要操纵 returned 数据。